C# 将字符串格式化为带时区的日期时间
我有一个C# 将字符串格式化为带时区的日期时间,c#,.net,parsing,timezone,C#,.net,Parsing,Timezone,我有一个string s=“2010年5月16日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…我想是什么导致了问题或我的格式? 试试这个: string dt
string s=“2010年5月16日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…我想是什么导致了问题或我的格式?
试试这个:
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);
编辑:
夏令时请考虑和
确保日期时间是明确的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
有关更多详细信息,请参阅此var dt=DateTime.ParseExact(s,“MMM dd,yyyy H:mm:ss tt'CDT',null)如何;?如果CDT有夏令时并变为-4,会发生什么情况?我在哪里可以找到有关偏移和时区的信息,我也可能将CST作为时区,需要替换和处理夏令时。若要将此日期转换为UTC,我不能只使用dt.ToUniversalTime()吗?请注意,
IsDaylightSavingTime
如果时间是TimeZoneInfo.Local
时区中的昼间时间,则返回true,而不是您调用该方法的DateTime
实例所设置的时间。这有多糟糕?如果运行该应用程序的机器是UTC,则该方法始终返回false
这是正确的o使用UTC,因为它是国际标准,但GMT对于夏令时并不含糊。GMT始终为UTC+0。英国在夏季切换到英国夏令时。更多信息,请访问