AM / PM指示符的日期格式未正确解析

时间:2013-05-21 16:41:35

标签: .net vb.net date-format

我正在使用此代码将字符串转换为日期。

Dim outputDate as Date ' I have tried also with DateTime
Dim inputStringDate as String = "January 14, 2013 PM"
Dim dateFormat as string = "MMMM dd, yyyy tt"    

 isValidDate = Date.TryParseExact(inputStringDate, dateFormat, New CultureInfo("en-US"), _    
                                  Globalization.DateTimeStyles.None, outputDate)    
' isValidDate = true
outputDate.ToString(dateFormat) 'January 14, 2013 AM

问题是“tt”无法识别。输入文本为“PM”(2013年1月14日 PM ),但在解析到日期并应用格式后,我得到了“AM”(2013年1月14日 AM )。

outputDate的时间是00:00:00,但我认为应该是PM默认时间12:00:00。

环境:.Net 2.0
dtinfo.PMDesignator = PM
dtinfo.AMDesignator = AM

感谢您的帮助

概述

当尝试使用AM / PM指示符(tt)解析日期字符串但没有时间(hh:mm)时,例如“2013年1月14日PM”(MMMM dd,yyyy tt),似乎.NET Framework 2会成功解析它,但会通过将时间设置为AM默认值来忽略AM / PM部分,这是午夜(00:00)。解决方案总是给它时间,例如“hh:mm tt”或“HH:mm” 但是在同一场景中使用.Net Framework 4,在没有时间的情况下解析日期字符串会失败;这是因为.Net 4需要时间和AM / PM指示符(hh:mm tt),或使用24格式(HH:mm)。感谢@Dave Michener(请查看其评论)

所以在.Net 4中
MMMM dd,yyyy tt - >失败
MMMM dd,yyyy hh:mm - >失败
MMMM dd,yyyy hh:mm tt - >作品
MMMM dd,yyyy HH:mm - >作品

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但没有'PM默认时间'这样的事情。如果您没有指定时间(“00:00:00”),如果您没有指定分钟和秒(“hh:00:00”)或者您没有指定时间,那么只有默认时间值指定秒数(“hh:mm:00”)。如果你想要PM,你需要给它一个时间来工作。它不知道你在说什么,如果你把它作为输入“AM”,它只是碰巧它在理解格式时使用的默认值但不能明确地解析它是AM时间所以它看起来喜欢它理解。