【问题标题】:Date format with AM/PM designator is not correctly parse带有 AM/PM 指示符的日期格式未正确解析
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多