简单的问题,我有这个字符串:
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格式而不是本地时区格式?
由于
答案 0 :(得分:6)
我怎么能告诉他提供的日期字符串是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项目开始,但这是另一回事。)
答案 1 :(得分:2)
DateTimeOffset.TryParse Method (String, IFormatProvider, DateTimeStyles, DateTimeOffset)
允许您指定DateTimeStyles
。其中一个DateTimeStyles
是AssumeUniversal
,这是您正在寻找的内容:
如果解析后的字符串中未指定时区,则字符串为 假设表示UTC。此值不能与AssumeLocal一起使用 RoundtripKind。
答案 2 :(得分:1)
不知道.Net API是如何提供的,但我猜你可能会在解析之前使用ISO8601格式来表示UTC时区,即首先将7/12/2014 4:42:00 PM
翻译成2014-07-02T16:42:00Z
然后使用DateTimeOffset