我收到的数据表示来自服务的时隙作为字符串形式:
1500-1600
这意味着下午3点到4点。
我将列出这些例如。
1200-1300
1300-1400
1400-1500
我必须在UI中将其表示为
下午12点 - 下午1点
下午1点 - 下午2点
下午2点 - 下午3点
不幸的是,这个列表可能是随机顺序。
我的问题是,有没有办法使用DateTime对象将24小时时间转换为12小时时间,还有一种方法可以按顺序排序时间吗?
目前我觉得我必须编写自定义解析功能,但想知道是否有人知道如何做得更好?或者可以就如何实现这一目标提出建议。
答案 0 :(得分:11)
我假设您知道如何将时间分成“1400”和“1500”。最简单的方法(IMO)是使用
DateTime.ParseExact(input, "HHmm", CultureInfo.InvariantCulture)
这将返回DateTime
与今天的日期和给定时间。然后,您可以根据需要格式化DateTime
。
或者,您可以将“1400”解析为整数,然后使用Math.DivRem找到分钟和小时,除以100.我个人更喜欢使用DateTime。
答案 1 :(得分:4)
如果您有四位数字符串(1200,1300)并且它总是四位数(例如上午9点是0900),那么您可以像ParseExact
method那样调用静态DateTime
structure,如下所示:
DateTime dt = DateTime.ParseExact(time, "HHmm", formatInfo);
formatInfo
是IFormatProvider
interface实施。
如果你有一个三位数字符串,那么你可以使用它:
DateTime dt = DateTime.ParseExact(time, "Hmm", formatInfo);
但是,我建议使用四位数的字符串,因为时间模糊,如“121”。
从那里,如果你想输出am / pm等等,你只需调用ToString
method,传递以下格式:
string ampm = dt.ToString("htt");
答案 2 :(得分:1)
我首先拆分“ - ”以获取两个不同的字符串,然后使用DateTime.ParseExact()
方法查看将其转换为可用的日期时间对象
答案 3 :(得分:0)
尝试将其转换并输出为您需要的任何格式
Dim aDateTime As DateTime
aDateTime = DateTime.ParseExact(input, "HHmm", Nothing)
Dim outputToDesiredFormat As String = dt.ToString("h:mm tt")
答案 4 :(得分:-1)
自定义解析应该是微不足道的。在' - '处拆分并每次解析;删除最后两位数字以获得分钟数,剩下的一两位数来获得小时数,然后就完成了。
如果您需要它们,请对它们进行排序。
如果您需要更多帮助,请更新问题或发表评论。