c# - 如何将此 UTC 日期时间字符串转换为 DateTime 对象 c#
问题描述
我一直在尝试将此字符串转换为 C# 中的 DateTime 对象
2019-09-23T08:34:00UTC+1
我试过使用 DateTime.Parse 但它抛出了一个异常
“字符串未被识别为有效的日期时间。”
解决方案
很抱歉,你看起来像是垃圾进垃圾出的受害者。
这是一种不寻常的格式,这就是为什么在我为您提出解决方案之前,我想说的第一件事是“如果可以,请先修复您的输入”。
假设您无法修复输入,那么您需要考虑一些事情;
- 首先,如果您的字符串有一些部分,例如
UTC
and/orGMT
,则没有自定义日期和时间格式说明符来解析它们。这就是为什么您需要将它们作为字符串文字转义的原因。有关详细信息,请参阅此问题。 - 其次,您的
+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
属性。
但是,我再次强烈建议您先修复您的输入。