将UTC日期字符串解析为c#中的日期

本文关键字:日期 UTC 字符串 | 更新日期: 2023-09-27 18:12:50

简单的问题,我有这个字符串:

string dateString = "7/12/2014 4:42:00 PM";

这是一个日期字符串,它在UTC时区。

我需要将其转换为日期,所以我正在做以下操作:

DateTimeOffset dateOffset;
DateTimeOffset.TryParse(dateString, out dateOffset);
DateTime date = dateOffset.UtcDateTime;

问题:

当我解析字符串到日期时,代码正在考虑dateString在PC的本地时区(+3 GMT),而不是在UTC时区。

所以我得到以下dateOffset = {7/12/2014 4:42:00 PM +03:00}date = {7/12/2014 1:42:00 PM}

我如何告诉他提供的日期字符串是UTC格式而不是本地时区格式?

谢谢

将UTC日期字符串解析为c#中的日期

我如何告诉他提供的日期字符串是UTC格式而不是本地时区格式?

在呼叫中设置DateTimeStyles值为AssumeUniversal。它告诉解析代码要做什么。例如:

// null here means the thread's current culture - adjust it accordingly.
if (DateTimeOffset.TryParse(dateString, null, DateTimeStyles.AssumeUniversal,
                            out dateOffset))
{
    // Valid
}

您应该始终使用TryParse的结果来判断它是否被成功解析。

如果你知道格式和特定文化,我个人会使用DateTimeOffset.TryParseExact。(嗯,说实话,我想用我的Noda Time项目开始,但这是另一回事。)

DateTimeOffset.TryParse再次过载

DateTimeOffset.TryParse Method (String, IFormatProvider, DateTimeStyles, DateTimeOffset)

允许指定DateTimeStylesDateTimeStyles之一是AssumeUniversal,这就是你要找的:

如果解析字符串中没有指定时区,则该字符串为假定表示UTC。此值不能与假设本地或RoundtripKind .

不知道如何。net API提供,但我猜你可能会使用ISO8601格式来指示一个UTC时区之前解析,即,首先翻译成7/12/2014 4:42:00 PM的东西2014-07-02T16:42:00Z,然后使用尝试解析使用DateTimeOffset