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

pba*_*rna 3 c# timezone datetimeoffset

我创建了一个string 扩展方法,它将特定的转换stringDateTimeOffset. 我执行了以下方法:

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

    if (DateTimeOffset.TryParse(text, out date))
    {
        return date;
    }
    else
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

用这个字符串:

"2010-05-10".ConvertToDateTimeOffset()
Run Code Online (Sandbox Code Playgroud)

我想取回以下结果:

{2010. 05. 10. 0:00:00 +00:00}
Run Code Online (Sandbox Code Playgroud)

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

{2010. 05. 10. 0:00:00 +02:00}
Run Code Online (Sandbox Code Playgroud)

我怎样才能消除这个时区问题

Dmi*_*nko 5

如果你想要UTC,而不是本地时间,你必须手动指定它DateTimeStyles.AssumeUniversal

... 
if (DateTimeOffset.TryParse(text, 
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.AssumeUniversal, 
                            out date)) {
  ...
}
...
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法简化实现(C# 7.0+)out var

public static DateTimeOffset? ConvertToDateTimeOffset2(this string text) {
  return DateTimeOffset.TryParse(text, 
                                 CultureInfo.InvariantCulture, 
                                 DateTimeStyles.AssumeUniversal, 
                                 out var date)
    ? date
    : (DateTimeOffset?) null;
}
Run Code Online (Sandbox Code Playgroud)