1

我有以下格式的字符串:

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 点?

4

2 回答 2

7

为什么将时间中的 00 转换为上午 10 点?

XmlConvert.ToDateTime(string)返回DateTime带有 aKind的a Local- 换句话说,它将 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'

始终注意这样的警告。

于 2013-09-16T06:07:17.610 回答
0

你可以使用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

或者正如乔恩所说,您可以使用XmlDateTimeSerializationMode.Utc

string testDateExample = "2013-09-15T00:24:26.4215967Z";
DateTime dateConversion = XmlConvert.ToDateTime(testDateExample,XmlDateTimeSerializationMode.Utc);
Console.WriteLine(dateConversion);
于 2013-09-16T06:07:15.903 回答