【发布时间】:2017-10-17 17:35:32
【问题描述】:
我正在使用 c#,如果我这样做了
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)
返回值始终是凌晨 4:20 -- 我在使用 tt 时做错了什么?
谢谢!
【问题讨论】:
-
几个正确答案...既然我只能选择一个正确答案,我假设我应该选择第一个提交?
我正在使用 c#,如果我这样做了
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)
返回值始终是凌晨 4:20 -- 我在使用 tt 时做错了什么?
谢谢!
【问题讨论】:
将小时格式 (H) 设为小写,如下所示:
DateTime.ParseExact(
"4/4/2010 4:20:00 PM",
"M/d/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture);
大写的“H”表示 24 小时制,小写的“h”表示 12 小时制,将遵循候选字符串中的 AM/PM。
旁注:最好为这样的方法提供IFormatProvider 的实例(即使它只是CultureInfo.InvariantCulture)。在您遇到问题之前,它是无关紧要的事情之一,因此养成指定文化信息的习惯会很好。
【讨论】:
尝试以下方法:
Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy h':'mm':'ss tt", null));
这个输出:
4/4/2010 4:20:00 PM
【讨论】:
您需要为格式字符串中的小时参数使用小写的“h”。大写的“H”代表 24 小时制,因此“4”被识别为凌晨 4 点(因为“16”是下午 4 点)。
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)
【讨论】: