将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格式而不是本地时区格式?
在呼叫中设置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)
允许指定DateTimeStyles
。DateTimeStyles
之一是AssumeUniversal
,这就是你要找的:
如果解析字符串中没有指定时区,则该字符串为假定表示UTC。此值不能与假设本地或RoundtripKind .
不知道如何。net API提供,但我猜你可能会使用ISO8601格式来指示一个UTC时区之前解析,即,首先翻译成7/12/2014 4:42:00 PM
的东西2014-07-02T16:42:00Z
,然后使用尝试解析使用DateTimeOffset