【问题标题】:DateTime.Parse DD/MM/YYYY 24 Hour ClockDateTime.Parse DD/MM/YYYY 24 小时制
【发布时间】:2012-04-26 00:46:12
【问题描述】:

DateTime.Parse 失败

 15/08/2000 16:58

有什么想法吗?

我需要解析日期并获取一些国际数据。

DD/MM/YYYY 不会翻转到 24 小时制

MM/DD/YYYY 将接受 24 小时制

15/08/2000 4:58 PM 将解析

从 Kibbee 的回答中,我看到了使用其他文化。 我使用正则表达式来确定它是否是 dd/MM,如果是,则使用文化 fr-FR。

【问题讨论】:

  • 您在调用 parse 时是否指定了正确的区域性?
  • 我目前的文化是美国。就像我说的,有些是国际化的。

标签: .net datetime


【解决方案1】:

试试DateTime.ParseExact():

var result = DateTime.ParseExact(dateString,
                                 "dd/MM/yyyy HH:mm",
                                 new CultureInfo("en-US"));

【讨论】:

    【解决方案2】:

    如果您知道您期望日期的确切格式,您可能应该使用DateTime.ParseExact 来解析日期。出于您的目的,以下可能会起作用。

    string dateString, format;  
    DateTime result;
    CultureInfo provider = CultureInfo.InvariantCulture;
    
    dateString = "15/08/2000 16:58"
    format = "dd/MM/yyyy HH:mm"
    result = DateTime.ParseExact(dateString, format, provider);
    

    改到上面。将 hh 更改为 HH,因为 HH 表示 24 小时制。如果您不使用前导零,则只需使用 H。有关创建格式字符串的更多信息see this article

    同样来自链接的 MSDN 文章,看起来格式“g”应该可以工作。

    dateString = "15/06/2008 08:30";
    format = "g";
    CultureInfo provider = new CultureInfo("fr-FR");
    DateTime result = DateTime.ParseExact(dateString, format, provider);
    

    【讨论】:

    • 问题是我不知道格式。我实际上是从电子邮件中解析数百万个日期。让我测试一下你的答案。
    • 如果您不知道它们的格式,您将遇到准确性问题,因为 10/11/2008 可能表示 2008 年 10 月 11 日或 2008 年 11 月 10 日。两种日期格式都是很受欢迎。
    • 但我可以忍受不准确但一致的情况。这是用于电子邮件线程。宁愿准确。
    • 与我的服务器的连接中断了,所以我要到明天才能测试,但如果它有效,将标记为答案。
    • 我去了你的其他帖子并给了两个+1,所以你得到了答案。
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2023-04-02
    • 2021-10-13
    • 2020-02-24
    • 2016-10-17
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多