【问题标题】:Format String to Datetime with Timezone使用时区将字符串格式化为日期时间
【发布时间】:2012-08-06 01:47:01
【问题描述】:

我有一个 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);

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

【问题讨论】:

  • var dt = DateTime.ParseExact(s, "MMM dd, yyyy H:mm:ss tt 'CDT'", null); 怎么样?

标签: c# .net parsing timezone


【解决方案1】:

Central Daylight Time

试试这个:

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);

编辑:

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

Custom Date and Time Format Strings

【讨论】:

  • 如果 CDT 有夏令时并变为 -4 会发生什么?
  • 我在哪里可以找到有关偏移和时区的信息,我也可能将 CST 作为时区并需要替换和处理夏令时。
  • 将此日期转换为 UTC,我不能只使用 dt.ToUniversalTime() 吗?
  • 请注意,如果时间是 TimeZoneInfo.Local 时区的夏令时,IsDaylightSavingTime 返回 true,不是您调用该方法的 DateTime 实例被设定为。那有多可怕?如果运行应用程序的机器是UTC,该方法总是返回false
【解决方案2】:

确保 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");

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

更多详情请参考Link

【讨论】:

猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2023-03-14
  • 2018-05-17
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多