【问题标题】:DateTime.ParseExact formats questionDateTime.ParseExact 格式问题
【发布时间】:2009-11-25 16:30:17
【问题描述】:

我有日期时间字符串,看起来可能如下所示:

“1 13 2009 2300”、“1 14 2009 0”、“1 14 2009 100”

我需要解析成 DateTime。

我试过了:

string[] sExpectedFormats = {"M d yyyy Hmm", "M d yyyy hmm", "M d yyyy 0"};
DateTime dtReportDateTime = DateTime.ParseExact(sReportDateTime, 
 sExpectedFormats, 
 System.Globalization.CultureInfo.InvariantCulture,
 System.Globalization.DateTimeStyles.None);

但它在第三个“1 14 2009 100”上失败了。我不确定要使用什么格式?

为了澄清,我在提要中将这些数据作为日期部分“1 14”和时间部分“100”获取,因此我将其连接起来以便解析为 DateTime。

谢谢

【问题讨论】:

  • 哇,日期/时间格式甚至比 RFC 822 格式更糟糕。
  • 如果有必要,你能不能用前导零写出小时?
  • 或者,您可以在小时和分钟之间添加一个冒号吗?

标签: c# datetime


【解决方案1】:

怀疑它将“100”解释为“10”后跟“0”-即将H或h解析为“10”,然后找不到两位数的分钟。

坦率地说,我很想在解析之前手动重新格式化字符串,以便它总是以 4 位而不是 3 位结尾。虽然我通常不愿意推荐它们,但这听起来确实像是正则表达式的工作:)

顺便说一句,我不确定您为什么同时拥有“H”和“h”格式 - 它永远不会匹配第二种格式,因为任何对第二种有效的东西都会对首先。

如果您按照我的建议事先修复字符串,则可以使用

{"M d yyyy HHmm", "M d yyyy 0"}

【讨论】:

  • 我添加了“h”格式以尝试解析失败的格式。我将尝试重新格式化时间部分,使其始终为“HHMM”
  • 好的,成功地将时间部分转换为 h:mm 格式,所以我可以在我的解析中使用“M d yyyy H:m”,一切都很好。
【解决方案2】:

我认为它失败了,因为“hmm”=“100”在上午 1:00 或下午之间不明确。也许你应该坚持“Hmm”或使用“hmm tt”=“100 AM”格式。

编辑:尝试并失败。乔恩在他的回答中所说的话和我的评论是真实的。

【讨论】:

  • 这不是上午/下午的模糊性——而是小时停止和分钟开始的模糊性。否则 1100 也会失败,但这确实有效......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多