将String转换为DateTime,保持datetime不变

时间:2017-03-29 18:52:56

标签: c# datetime

将以下字符串转换为c#代码中的DateTime。

string dateTime = "2017-03-29T17:51:44.8389637Z";
DateTime dt1 = Convert.ToDateTime(dateTime);

以上代码将其转换为:3/29/2017 10:51:44 AM 转换后我失去了大约7个小时,我怎样才能得到结果:2017-03-29 17:51:44。我认为这与文化有关..?

请帮忙。

2 个答案:

答案 0 :(得分:1)

我建议使用DateTime.Parse来提供更强大的转换:

DateTime dt1 = DateTime.Parse("2017-03-29T17:51:44.8389637Z", CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal);

答案 1 :(得分:1)

发生这种情况的原因是您有一个以Z结尾的日期/时间字符串。这表示它处于UTC时间。当您转换为DateTime时,它会将其转换为您当地文化的时间,因此您的正好七小时,因为您的时区比UTC晚七个小时。

根据this Wikipedia article

  

如果时间是UTC,请在没有空格的时间后直接添加Z. Z是零UTC偏移的区域指示符。因此,“09:30 UTC”表示为“09:30Z”或“0930Z”。 “14:45:15 UTC”将是“14:45:15Z”或“144515Z”。

因此,您的2017-03-29 17:51:44字符串和3/29/2017 10:51:44 AM在不同的时区完全相同。

编辑:正如其他人所说,只需使用DateTime.Parse来指定您希望如何创建DateTime。