.NET/JavaScript在解析ISO8601时忽略夏令时(DST)
我一直在使用.NET和JavaScript测试日期/时间解析。这项任务与我之前问过的任务相关联: 请注意,这里的示例是.NET。要在JavaScript中获得此问题的示例,请参见上面的链接 解析ISO8601格式的日期/时间时,似乎忽略了DST(夏令时): 示例:.NET/JavaScript在解析ISO8601时忽略夏令时(DST),javascript,.net,datetime,utc,dst,Javascript,.net,Datetime,Utc,Dst,我一直在使用.NET和JavaScript测试日期/时间解析。这项任务与我之前问过的任务相关联: 请注意,这里的示例是.NET。要在JavaScript中获得此问题的示例,请参见上面的链接 解析ISO8601格式的日期/时间时,似乎忽略了DST(夏令时): 示例: Console.WriteLine("Inspecting DateTime.Now"); DateTime now = DateTime.Now; Console.WriteLine(now.ToLocalTime()); Con
Console.WriteLine("Inspecting DateTime.Now");
DateTime now = DateTime.Now;
Console.WriteLine(now.ToLocalTime());
Console.WriteLine(now.ToUniversalTime());
Console.WriteLine("Inspecting ISO8601 Parsing");
DateTime dt = DateTime.Parse("1987-01-05T08:45:30.500+0100");
Console.WriteLine(dt.ToLocalTime());
Console.WriteLine(dt.ToUniversalTime());
// Inspecting DateTime.Now
// 27/08/2013 13:44:33
// 27/08/2013 12:44:33
// Inspecting ISO8601 Parsing
// 05/01/1987 07:45:30
// 05/01/1987 07:45:30
结果:
Console.WriteLine("Inspecting DateTime.Now");
DateTime now = DateTime.Now;
Console.WriteLine(now.ToLocalTime());
Console.WriteLine(now.ToUniversalTime());
Console.WriteLine("Inspecting ISO8601 Parsing");
DateTime dt = DateTime.Parse("1987-01-05T08:45:30.500+0100");
Console.WriteLine(dt.ToLocalTime());
Console.WriteLine(dt.ToUniversalTime());
// Inspecting DateTime.Now
// 27/08/2013 13:44:33
// 27/08/2013 12:44:33
// Inspecting ISO8601 Parsing
// 05/01/1987 07:45:30
// 05/01/1987 07:45:30
当我为DateTime显示本地/世界时间时。现在,这是正确的。英国目前处于夏令时(夏令时,UTC+01:00)
当我为ISO8601字符串显示本地/世界时,这是不正确的,两者都显示UTC时间。当地时间应为“1987年1月5日08:45:30”
JavaScript也会出现这个问题
如果我将时区更改为其他时区(即UTC+04:00),则会得到预期的(正确的)结果,但使用当前设置,它似乎忽略了DST(夏令时)
注意:英国时区为UTC+00:00,但DST将我们设置为UTC+01:00…在解析日期/时间时,后者似乎被忽略
你知道为什么或者如何解决这个问题吗?这个问题与ecma javascript有什么关系?@HMR,请参阅我上一个问题的链接。JavaScript还忽略BST/DST夏令时。解析时它假定我在UTC+00:00,但由于BST/DST,它应该是UTC+01:00。。。这里的示例是用.NET编写的,但也广泛应用于JavaScript。Jeppe还没有回答JS部分吗?似乎如果你使用1987-01-05+01:00这样的日期,你有一个日期
1987-01-05
,其中使用UTC+1(阿姆斯特丹/巴黎/柏林),但你将它串起来,这样它就会转换为你的时区(提前一小时)。JS时区按预期运行,不是吗?@HMR,不是……正如我所说;JavaScript和.NET忽略DST。如果您手动更改时区,则会得到正确的结果。@HMR…我想它只是单击了一下!1987年1月5日是1月(obv),所以在英国,这是UTC+00:00…英国1月的DST是UTC+00:00。。。FACEPALM:-/