c# - DateTime.ToString() 不转换时间

标签 c# .net datetime type-conversion

看起来时间在转换过程中会自动更改。 我的输入是 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相反,您可以在项目中解析为 InstantZonedDateTime ,它知道它在 UTC 中... IMO,DateTime is simply broken ,正是由于您遇到的问题类型。

关于c# - DateTime.ToString() 不转换时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357939/

相关文章:

c# - SignalR 2、Autofac 3.5、MVC 5 和 OWIN : How to inject SignalR hub into a controller?

c# - C# 3.0 中隐式类型的好处是什么 >+

c# - 使用(C#、mpr.dll)访问网络驱动器文件时出错 : Unable to load DLL 'mrp.dll'

c# - MVVM - 静态 View 模型

java - 在 Spark Scala 中处理微秒

javascript - 从服务器读取另一台机器的文件

.net - 为什么将PSObject添加到Powershell中的ArrayList需要这么长时间?有更好的方法吗?

c# - Windows自定义控件如何实现数据绑定(bind)?

c# - 如何计算一组日期之间的间隔?

c# - 以毫秒精度获取 DateTime.Now