代码之家  ›  专栏  ›  技术社区  ›  Alastair Pitts

datetime.parse问题,system.globalization.gregoriancalendar中不支持

  •  7
  • Alastair Pitts  · 技术社区  · 16 年前

    我遇到一个问题,Gmail Atom提要中包含的特定时间字符串无法使用 DateTime.Parse() .我知道我可以使用datetime.typarse(),但我很好奇为什么这两个都不起作用,其他的都不起作用。

    2009-12-28T24:11:48Z
    2009-12-30T24:16:20Z
    

    具体的例外情况是:

    System.FormatException:Calendar System.Globalization.GregorianCalendar不支持字符串表示的日期时间。

    我怀疑是因为24小时…而不是00,但我不确定我会如何纠正。

    5 回复  |  直到 9 年前
        1
  •  16
  •   Barney Jose M.    11 年前
    private static DateTime ParseDate(string s)
    {
        DateTime result;
        if (!DateTime.TryParse(s, out result))
        {                
            result = DateTime.ParseExact(s, "yyyy-MM-ddT24:mm:ssK", System.Globalization.CultureInfo.InvariantCulture);
            result = result.AddDays(1);
        }
        return result;
    }
    
        2
  •  2
  •   Nathan Wheeler    16 年前

    如果只是 24 而不是 00 ,您可以简单地替换它并添加一天:

    String s = "2009-12-28T24:11:48Z";
    DateTime dt;
    if (s.Contains("T24:")
    {
        s = s.Replace("T24:", "T00:");
    
        if (DateTime.TryParse(s, out dt))
            dt.AddDays(1);
    }
    else
    {
        DateTime.TryParse(s, out dt);
    }
    
        3
  •  1
  •   James Bloomer    16 年前

    The DateTime entry in MSDN 说它支持 ISO 8601 允许24和00。它应该允许类型的格式 [YYYY][MM][DD]T[hh][mm]Z 如。 2010-01-04T14:04Z .

    午夜是一个特殊的情况,可以 被称为“00:00”和 “24:00”。使用符号“00:00” 在日历日开始时 使用频率更高。在 一天结束使用“24:00”。注意 “2007-04-05t24:00”是同一瞬间 同于“2007-04-06t00:00”(见合并) 日期和时间陈述如下)。

        4
  •  1
  •   Benjamin Podszun    16 年前

    与MD5sum想法相同,但方式不同:

     DateTime.ParseExact(
      "2009-12-28T24:11:48Z",
      new []{ "yyyy-MM-ddTHH:mm:ssK", "yyyy-MM-ddT24:mm:ssK" }, 
      System.Globalization.CultureInfo.InvariantCulture,
      System.Globalization.DateTimeStyles.None
    )
    

    不过,你还是需要检查一下日期是否正确。

        5
  •  1
  •   Oren Mazor    16 年前

    结果谷歌使用的是W3C日期和时间标准: http://www.w3.org/TR/NOTE-datetime ,哪个C不支持?很奇怪,但没那么奇怪。

    这个项目似乎为您实现了这一点。

    http://www.codeproject.com/KB/cs/w3cdate.aspx

    编辑:是的,我现在看到Google做得不对,但是W3CDate C结构中有一个例外。