DateTime.TryParseExact似乎无法使用“tt”匹配AM / PM

时间:2011-02-24 23:25:26

标签: c# .net datetime

C#noob在这里。简单的问题,但在网上查看所有内容,我似乎正在这样做。但任何人都可以告诉我为什么这段代码不起作用:

string testDateString = "2/02/2011 3:04:01 PM";
string testFormat = "d/MM/yyyy h:mm:ss tt";
DateTime testDate = new DateTime();
DateTime.TryParseExact(testDateString, testFormat, null, 0, out testDate);

// Value of testDate is the default {1/01/0001 12:00:00 a.m.}

但是只是从字符串日期中删除AM / PM并从格式中“tt”按预期工作?

string testDateString = "2/02/2011 3:04:01";
string testFormat = "d/MM/yyyy h:mm:ss";
DateTime testDate = new DateTime();
DateTime.TryParseExact(testDateString, testFormat, null, 0, out testDate);

// Value of testDate is the expected {2/02/2011 3:04:01 a.m.}

2 个答案:

答案 0 :(得分:7)

尽管完全名称,DateTime.TryParseExact()依赖于系统文化来解析日期。尝试指定使用AM / PM表示法的区域性,例如en-US

DateTime.TryParseExact(testDateString, testFormat, new System.Globalization.CultureInfo("en-US"), DateTimeStyles.None, out testDate);

答案 1 :(得分:3)

您必须指定实际使用AM / PM指示符的文化,例如Br​​ittish CultureInfo:

DateTime.TryParseExact(testDateString, testFormat, CultureInfo.GetCultureInfo("en-GB"), 0, out testDate);