1

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

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) 解析日期字符串时,例如“January 14, 2013 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 --> Works
MMMM dd, yyyy HH:mm --> Works

4

1 回答 1

0

如果我错了,请纠正我,但没有“下午默认时间”之类的东西。如果您根本没有指定时间(“00:00:00”),如果您没有指定分钟和秒(“hh:00:00”),或者如果您没有指定,则只有默认时间值指定秒数(“hh:mm:00”)。如果你想要 PM,你需要给它一些时间来处理它。如果您将“AM”作为输入输入,它也不知道您在说什么,碰巧它在理解格式但无法明确解析时使用的默认值是 AM 时间,所以看起来就像它理解一样。

于 2013-05-21T22:46:15.293 回答