Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET/JavaScript在解析ISO8601时忽略夏令时(DST)_Javascript_.net_Datetime_Utc_Dst - Fatal编程技术网

.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

我一直在使用.NET和JavaScript测试日期/时间解析。这项任务与我之前问过的任务相关联:

请注意,这里的示例是.NET。要在JavaScript中获得此问题的示例,请参见上面的链接

解析ISO8601格式的日期/时间时,似乎忽略了DST(夏令时):

示例:

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:-/