【问题标题】:c# tryParseExact not recognized as valid datetimec# tryParseExact 不被识别为有效的日期时间
【发布时间】:2019-02-27 01:25:38
【问题描述】:

我正在尝试解析我正在尝试解析的字符串。

当我使用var newDt = Convert.ToDateTime("3/6/2019 12:00:00 AM +00:00");

它给了我不同时区的日期。我会得到3/5/2019 4:00AM

的日期时间

我希望它解析并返回与字符串相同的日期时间。

我试过了

var newDt = DateTime.ParseExact("3/6/2019 12:00:00 AM +00:00", "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

我得到了错误

System.FormatException: '字符串未被识别为有效 日期时间。

如何解析日期 "3/6/2019 12:00:00 AM +00:00" 以返回具有相同值 3/6/2019 12AM 的日期时间

【问题讨论】:

  • 格式中的偏移量(+00:00)在哪里计算?你通过的和你告诉它期望的并不准确。
  • @BrootsWaymb 这就是我感到困惑的部分。我不确定如何解释+00:00。我知道格式错误,但我找不到任何有关如何格式化的参考资料。
  • 等一下.. 你确定Convert.ToDateTime("3/6/2019 12:00:00 AM +00:00") 会返回3/5/2019 4:00AM 吗?它使-32:00 小时偏移o.O 也许它返回3/6/2019 4:00AM
  • @SonerGönül 抱歉,我的意思是 3/5/2019 4:00PM 不是 AM
  • @OrthoHomeDefense 但是那仍然使-20:00小时偏移:\

标签: c# datetime


【解决方案1】:

您的机器中可能有UTC−08:00 time zone(我假设您的Convert.ToDateTime 代码部分返回3/6/2019 4:00AM 而不是3/5/2019 4:00AM),这就是为什么当您使用偏移值解析它时,您将获得4 小时的附加值。

如果您的字符串包含UTC offset 值,最好将其解析为DateTimeOffset 而不是DateTime

var newDt = DateTimeOffset.ParseExact("3/6/2019 12:00:00 AM +00:00", 
                                      "M/d/yyyy h:mm:ss tt zzz",
                                      CultureInfo.InvariantCulture);

然后你可以使用它的.DateTime property 来得到你期望的值。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多