【问题标题】:parse iCalendar date using c#使用 c# 解析 iCalendar 日期
【发布时间】:2009-09-13 23:13:18
【问题描述】:

是否有使用 c# 将 iCalendar 日期解析为 .net 的直接方法? iCalendar 日期如下所示:

2009-08-11T10:00+05:0000

我需要解析它以友好的格式显示它...谢谢

【问题讨论】:

  • 找到了一个半答案:使用 DateTime..::.Parse Method (String, IFormatProvider, DateTimeStyles) with style as None a,d format provider asculturecurrent,但我仍然有一个问题,ic​​alendar上面的日期引发了一个异常,显然它不允许最后两个零!我不知道最后两个零是做什么用的,但是有没有办法解决这个问题?
  • 请参阅下面的答案,我假设日期表示 10:00 + 5 小时,即 15:00(下午 3:00)。

标签: c# .net icalendar


【解决方案1】:
string strDate = "2009-08-11T10:00+05:0000";
DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
dtfi.FullDateTimePattern = "yyyy-MM-ddTHH:mmzzz";

DateTime dt = DateTime.Parse(c.Substring(0, c.Length-2), dtfi);

zzz 是针对时区的,但只有在这样表示时才被识别:+xx:xx。 我用您的示例进行了测试,删除了最后 2 个 0,然后使用自定义 DateTimeFormatInfo 进行解析。

【讨论】:

    【解决方案2】:

    您可以使用DateTime.Parse() 解析+ 之前的所有内容。我不知道 iCalendar 格式规范,但我假设 + 之后是添加到 + 之前日期的小时/分钟。因此,您可以使用AddHours()AddMinutes() 将所需的位添加到DateTime.Parse() 返回的日期时间。

    这需要一些字符串解析,但使用一些正则表达式应该没问题...

    【讨论】:

      【解决方案3】:

      由于这不是标准格式字符串,但您知道确切的格式,您可以使用DateTime.ParseExact 并指定a custom format string,如下所示:

      DateTime.ParseExact(d, "yyyy-MM-ddTHH:mmzzz00", CultureInfo.InvariantCulture);
      

      “zzz”说明符表示与 UTC 的小时和分钟偏移量,最后的两个零只是与您正在处理的格式匹配的文字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多