【发布时间】:2013-05-21 16:41:34
【问题描述】:
我正在使用此代码将字符串转换为日期。
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 --> 有效
【问题讨论】:
-
可能是因为时间是00:00:00。
-
当我尝试你的代码时,
isValidDate也是错误的。 -
没错,outputDate.ToString("HH:mm") 返回 00:00。但是 AM/PM 指示符设置了一个小时?还是不行?
-
我可以确认您的结果,
isValidDate对于 .Net 2 是 True,对于 .Net 4 是 false。但是,我认为 @dbasnett 就在这里,在 .Net 2 场景中,如果您尝试以下操作:outputDate.ToString("f"),您将得到以下结果:Monday, January 14, 2013 12:00 AM。因此,即使 TryParseExact 成功,.Net 2 显然忽略了 AM/PM 部分,并且时间部分设置为午夜。显然,.Net 4 认为在掩码中指定 AM/PM 而不包括时间本身是错误的。
标签: .net vb.net date-format