使用时区将字符串格式化为日期时间

War*_*arz 14 .net c# timezone parsing

我有一个string s = "May 16, 2010 7:20:12 AM CDT我想转换为DateTime对象.在下面的代码中,我尝试使用已知格式解析文本时,无法转换日期格式错误.

timeStamp = matches[0].Groups[1].Value;
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null);
Run Code Online (Sandbox Code Playgroud)

时区以CDT UTC的形式出现......我认为是什么导致问题或我的格式?

rum*_*rak 9

中部夏令时

试试这个:

string dts = "May 16, 2010 7:20:12 AM CDT";
DateTime dt = 
    DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null);
Run Code Online (Sandbox Code Playgroud)

编辑:

对于夏令时,请考虑DateTime.IsDaylightSavingTimeTimeZone.CurrentTimeZone

自定义日期和时间格式字符串

  • 如果CDT有夏令时并变成-4,会发生什么? (2认同)
  • 请注意,如果时间是“TimeZoneInfo.Local”时区的夏令时,“IsDaylightSavingTime”返回 true,**不是**您调用该方法的“DateTime”实例设置的时间。那有多可怕?如果运行应用程序的计算机采用 UTC,则该方法始终返回“false” (2认同)

小智 8

确保DateTime是明确的DateTimeKind.Utc.避免使用"GMT",这对于夏令时来说是模棱两可的.

    var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
    string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz");
Run Code Online (Sandbox Code Playgroud)

它给出了输出:2010年12月31日19:01:01 GMT-06:00

有关详细信息,请参阅此链接

  • 使用UTC是正确的,因为它是国际标准,但是GMT对于夏时制并不是模棱两可的。GMT始终为UTC + 0。英国在夏季转换为BST。有关更多信息,请访问http://www.differencebetween.com/difference-between-gmt-and-utc/ (2认同)