首页 > 解决方案 > 如何将此 UTC 日期时间字符串转换为 DateTime 对象 c#

问题描述

我一直在尝试将此字符串转换为 C# 中的 DateTime 对象

2019-09-23T08:34:00UTC+1

我试过使用 DateTime.Parse 但它抛出了一个异常

“字符串未被识别为有效的日期时间。”

标签: c#datetimeutc

解决方案


很抱歉,你看起来像是垃圾进垃圾出的受害者。

这是一种不寻常的格式,这就是为什么在我为您提出解决方案之前,我想说的第一件事是“如果可以,请先修复您的输入”。

假设您无法修复输入,那么您需要考虑一些事情;

  1. 首先,如果您的字符串有一些部分,例如UTCand/or GMT,则没有自定义日期和时间格式说明符来解析它们。这就是为什么您需要将它们作为字符串文字转义的原因。有关详细信息,请参阅此问题
  2. 其次,您的+1部分看起来像UTC 偏移值。"z"定义格式说明符是您解析它所需要的,但要小心,建议将此格式说明符与DateTime值一起使用,因为它反映实例Kind属性的值。

作为 的解决方案DateTime,您可以像我建议的那样对其进行解析;

var s = "2019-09-23T08:34:00UTC+1";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
                          DateTimeStyles.AdjustToUniversal, out dt))
{
    Console.WriteLine(dt);
}

它给你2019-09-23 07:34:00作为一个DateTime,它Utc作为一个Kind属性。

作为解决方案DateTimeOffset- 因为你的字符串有一个 UTC Offset 值,你应该考虑用这个而不是Datetime - 来解析,正如马特评论的那样,你可以使用它的.DateTime属性来获取它的数据:

var s = "2019-09-23T08:34:00UTC+1";
DateTimeOffset dto;
if(DateTimeOffset.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dto))
{
    Console.WriteLine(dto.DateTime);
}

这给了你相同的结果DateTime,但Unspecified作为一个.Kind属性。

但是,我再次强烈建议您先修复您的输入。


推荐阅读