C#日期时间格式:如何只显示完整的小时,例如下午2点

本文关键字:小时 2点 显示 格式 时间 日期 | 更新日期: 2023-09-27 18:03:14

可能重复:
使用当前区域性定义的12小时或24小时格式从DateTime获取一天中的小时

我在格式化DateTime对象以便只显示完整的小时数时遇到了一些问题。例如,如果我有以下DateTime:

? StartTime
{7/25/2011 8:00:00 AM}

我想把这个打印成"上午8点"。格式也应该遵循当前文化的规则,因此在其他国家,上面的示例可以打印为"8"。下午4点将显示为16。

我还没有找到任何内置的格式化程序来做这件事,所以我想写一些静态方法来处理这个问题。我需要获得正确格式的小时数(一位数或两位数(和给定小时的字符串指示符。字符串指示符使用ToString("tt"(很容易,如果当前区域性使用24小时格式,它会正确地返回空。所以我已经成功了一半。

但后来我被卡住了,因为CultureInfo的DateTimeFormatInfo似乎没有告诉我应该用一个或两个数字显示小时(h与h(。

有什么想法吗?

C#日期时间格式:如何只显示完整的小时,例如下午2点

我认为您可以将hh格式与tt组合使用。

DateTime x = new DateTime(2011,10,10,08,00)
Console.WriteLine(x.ToString("h tt")); // Output: '8 AM'
x = new DateTime(2011,10,10,16,08,00)
Console.WriteLine(x.ToString("h tt")); // Output: '4 PM'

看看http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#Y16327

更新:

我认为使用当前区域性定义的12小时或24小时格式从DateTime获取一天中的小时数,可以为您提供如何根据CultureInfo显示小时数(12或24小时(的答案。

(添加另一个答案,因为我的移动连接无法编辑。(

好吧,如果您已经知道区域性是否使用am/pm标志符,那么告诉您是使用h还是H-如果没有标志符,您不想使用h,因为这很模糊("8"可能意味着"上午8点"或"晚上8点"(。

因此使用h tt%H,这取决于确定是否存在am/pm指示符的结果。