C#DateTime格式:如何仅显示完整的小时数,例如。下午2点?

时间:2011-07-25 06:00:41

标签: c# datetime datetime-format

  

可能重复:
  Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current culture

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

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

我想将其打印为“上午8点”。格式化也应遵循当前文化的规则,因此在其他国家/地区,上述示例可以打印为“8”。下午4点将显示为16。

我没有找到任何内置的格式化程序来执行此操作,因此我考虑编写一些静态方法来处理问题。我需要以正确的格式(单个或两个数字)和给定小时的字符串指示符获取小时数。字符串指示符使用ToString(“tt”)很容易,如果当前文化使用24h格式,则正确返回空。所以我在那里。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我认为您可以将 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

更新:

我认为Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current culture为您提供了如何根据CultureInfo显示小时数的答案(12小时或24小时)。

答案 1 :(得分:1)

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

好的,如果你已经知道文化是否使用am / pm指示符,那么 也会告诉你是否使用hH - 你不要如果没有指示符,我想使用h,因为这是不明确的(“8”可能意味着“上午8点”或“晚上8点”)。

所以要么使用h tt%H,具体取决于确定是否有am / pm指示符的结果。