【问题标题】:How to parse UTC format "yyyy-MM-dd'T'HH:mm:sszzzz" in to "MM/dd/yyyy"?如何将 UTC 格式“yyyy-MM-dd'T'HH:mm:sszzzz”解析为“MM/dd/yyyy”?
【发布时间】:2019-11-09 10:31:34
【问题描述】:

我正在尝试转换我从 API 获得的 DateTime string(UTC 格式)。最初的string

2019-06-24T13:24:39+1770

我尝试使用代码:

DateTime Dt;

DateTime.TryParseExact(
   DtString, 
   new string[] { 
     "yyyy-MM-dd'T'HH:mm:sszzzz", 
     "yyyy-MM-dd HH:mm:ss", 
     "yyyy-MM-dd HH:mm", 
     "yyyy-MMM-dd", 
     "MM/dd/yyyy",
   CultureInfo.CurrentCulture,
   DateTimeStyles.AdjustToUniversal, 
   out Dt);

或者

DateTime.ParseExact(value, "yyyy-MM-dd'T'HH:mm:sszzzz", CultureInfo.InvariantCulture)

它给了我运行时错误

字符串未被识别为有效日期时间

【问题讨论】:

  • 请问2019-06-24T13:24:39+1770 中的+1770 是什么意思?
  • @DmitryBychenko 我相信是时区
  • @Priya 不,不是。有效偏移量为+01:00-07:00+05:301770 应该是什么?分钟?在这种情况下,偏移量为 29.5 小时
  • 在任何情况下,有事件的正确时间类型是DateTimeOffset,而不是DateTime两者 DateTime.ParseDateTimeOffset.Parse 甚至可以在没有格式说明符的情况下解析ISO8601 格式。 DateTime.Parse("2019-06-27T15:12:24.3032748+03:00") 正常工作,DateTimeOffset.Parse("2019-06-27T15:12:24.3032748+03:00") 也是如此
  • @Priya 我必须同意 Panagiotis,DateTimeOffset 是必需的,偏移部分无效。根据 yo ISO 8601,如果所描述的时间比 UTC 早一小时,例如罗安达的时间,则区域指示符将是“+01:00”、“+0100”或简单的“+01”。但是,1770 是无效的,偏移范围从 -12 到 +14,因此该值必须不正确或其他。

标签: c# asp.net asp.net-mvc datetime utc


【解决方案1】:

您可以使用正则表达式将日期解析为字符串,然后使用解析结果的组以您想要的方式格式化日期。

这是最优化的解决方案,但绝对可以解决您的问题。

【讨论】:

  • 不,当找到正确的格式时,DateTimeOffset.ParseExact 几乎肯定是比正则表达式更好的解决方案。该框架提供了适当的方法——在这里使用正则表达式是没有意义的。问题是输入数据目前没有意义(偏移量为 +1770),这完全独立于用于解析它的代码。
  • @JonSkeet 我同意,感谢您的更正。我提供糟糕解决方案的借口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多