将 yyyy-mm-ddThh:mm:ssz 转换为日期时间 - 小时返回不正确
本文关键字:时间 小时 返回 不正确 日期 yyyy-mm-ddThh mm ssz 转换 | 更新日期: 2023-09-27 18:31:29
我有一个以下格式的字符串:
yyyy-mm-ddThh:mm:ssZ
示例字符串:
2013-09-15T00:24:26.4215967Z
我需要将其转换为日期时间,因此我使用以下代码:
string testDateExample = "2013-09-15T00:24:26.4215967Z";
DateTime dateConversion = XmlConvert.ToDateTime(testDateExample);
Console.WriteLine(dateConversion);
这将输出:
9/15/2013 10:24:26 AM
为什么时间中的 00 被转换为上午 10 点?
为什么时间中的 00 被转换为上午 10 点?
XmlConvert.ToDateTime(string)
返回Kind
为 Local
的DateTime
- 换句话说,它将 UTC 值转换为等效的系统本地时间。据推测,您目前处于UTC+10的时区。
你最好使用 XmlConvert.ToDateTimeOffset
,或者使用也需要XmlDateTimeSerializationMode
的重载:
string testDateExample = "2013-09-15T00:24:26.4215967Z";
DateTime dateConversion = XmlConvert.ToDateTime(testDateExample,
XmlDateTimeSerializationMode.Utc);
Console.WriteLine(dateConversion);
请注意,您应该已经收到有关当前正在使用的重载的警告,因为它已弃用。我在编译代码时收到此警告:
Test.cs(12,35): warning CS0618: 'System.Xml.XmlConvert.ToDateTime(string)' is
obsolete: 'Use XmlConvert.ToDateTime() that takes in
XmlDateTimeSerializationMode'
始终注意这样的警告。
您可以使用 ToUniversalTime()
string testDateExample = "2013-09-15T00:24:26.4215967Z";
DateTime dateConversion = XmlConvert.ToDateTime(testDateExample);
Console.WriteLine(dateConversion.ToUniversalTime());
例如,在下面的代码中,我得到了两个不同的结果:
Console.WriteLine(dateConversion.ToUniversalTime()+"'n"+
dateConversion);
结果:
09/15/2013 12:24:26 AM
09/15/2013 03:54:26 AM
或者正如Jon所说,你可以使用XmlDateTimeSerializationMode.Utc:
string testDateExample = "2013-09-15T00:24:26.4215967Z";
DateTime dateConversion = XmlConvert.ToDateTime(testDateExample,XmlDateTimeSerializationMode.Utc);
Console.WriteLine(dateConversion);