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

4

我创建了一个 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}

我应该如何解决这个时间区域问题?

3
如果(DateTimeOffset.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out date)) {...} - Dmitry Bychenko
2个回答

8
如果你想要的是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;
}

0

请查看此链接

我相信您正在寻找

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

根据文档,
指示如果输入参数缺少元素,则应提供UTC偏移量(00:00)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接