将字符串转换为DateTimeOffset忽略时区

时间:2018-05-18 09:50:02

标签: c# timezone datetimeoffset

我已经创建了string 扩展方法,它会将特定的string转换为DateTimeOffset。我执行了以下方法:

public static DateTimeOffset? ConvertToDateTimeOffset(this string text)
{
    DateTimeOffset date;

    if (DateTimeOffset.TryParse(text, out date))
    {
        return date;
    }
    else
    {
        return null;
    }
}

使用此字符串:

"2010-05-10".ConvertToDateTimeOffset()

我想取回以下结果:

{2010. 05. 10. 0:00:00 +00:00}

但我的执行方法调用的实际结果是(请注意+02:00):

{2010. 05. 10. 0:00:00 +02:00}

如何消除此时区问题

2 个答案:

答案 0 :(得分:3)

如果您想要 UTC ,而不是本地时间,则必须使用DateTimeStyles.AssumeUniversal手动指定

... 
if (DateTimeOffset.TryParse(text, 
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.AssumeUniversal, 
                            out date)) {
  ...
}
...

您可以使用out var

简化实施(C#7.0+)
public static DateTimeOffset? ConvertToDateTimeOffset2(this string text) {
  return DateTimeOffset.TryParse(text, 
                                 CultureInfo.InvariantCulture, 
                                 DateTimeStyles.AssumeUniversal, 
                                 out var date)
    ? date
    : (DateTimeOffset?) null;
}

答案 1 :(得分:0)

选中link

我相信你正在寻找

   DateTimeOffset.TryParse(text, null, DateTimeStyles.AssumeUniversal, out date);

根据文件

Indicates that, if the input parameter lacks an <Offset> element, the UTC offset (00:00) should be provided.