pba*_*rna 3 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;
}
}
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)
我怎样才能消除这个时区问题?
如果你想要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)