看起来时间在转换过程中会自动更改。
我的输入是 17:15:25
。但是,它会转换为 13:15:25
可能是什么原因?
string testDate = Convert.ToDateTime("2016-03-24T17:15:25.879Z")
.ToString("dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
我得到的 testDate
结果是:24-Mar-2016 13:15:25
最佳答案
输入中的 Z
表示 UTC 时间,但 Convert.ToDateTime
的默认行为是将结果转换为本地时间。如果您查看 Convert.ToDateTime("2016-03-30T17:15:25.879Z").Kind
的结果,您会看到它是 Local
。
我建议使用 DateTime.ParseExact
,您可以在其中指定所需的确切 行为,例如保留 UTC 时间:
var dateTime = DateTime.ParseExact(
"2016-03-30T17:15:25.879Z",
"yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
Console.WriteLine(dateTime); // March 30 2016 17:15 (...)
Console.WriteLine(dateTime.Kind); // Utc
然后您可以根据需要将该值转换为字符串。
当然,我真的建议使用我的 Noda Time相反,您可以在项目中解析为 Instant
或 ZonedDateTime
,它知道它在 UTC 中... IMO,DateTime
is simply broken ,正是由于您遇到的问题类型。
关于c# - DateTime.ToString() 不转换时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357939/