UTC是否遵循夏令时?

93

我正在尝试编写一个脚本,希望将任何时区转换为协调世界时(UTC),并进行反向转换。

但是我从某个地方得知,在考虑夏令时(DST)与否的情况下,将任何时区转换为 UTC 时,都会得到相同的 UTC 时间。

例如,如果我尝试将此时间转换:

$mytime = '2011-03-31 05:06:00.000';
$myzone = 'America/New_York';

转换为带有夏令时和不带有夏令时的UTC时间,我将得到...

(New_York->UTC DST=Yes)2011-03-31 09:06:00
(New_York->UTC DST=No)2011-03-31 09:06:00 ..........

这是否正确?如果是,为什么?请有人给我答案。


如果您向我们展示脚本,我们可以更好地帮助您。 - Kevin Lacquement
4
答案是,协调世界时(UTC)不遵守夏令时;但其他时区可能会遵守。 - Kevin Lacquement
2个回答

158
不,UTC本身从不使用夏令时。它是其他时区相对于其表达的恒定参考标准。根据维基百科UTC页面,UTC不随季节变化而改变,但如果一个时区管辖区观察夏令时,则当地时间或民用时间可能会改变。换句话说,当一个时区观察夏令时时,其与UTC的偏移量在夏令时转换时会发生变化,但这是该时区观察夏令时,而不是UTC。不了解PHP时区处理情况,我认为在转换中可以指定“有夏令时”或“无夏令时”很奇怪——时区本身指定何时开始夏令时……你不应该自己指定。

2
不了解PHP时区处理的情况下,我觉得在转换中可以指定“有夏令时”或“无夏令时”似乎很奇怪......这可能是因为您还没有做过可编程超链接面条。这是一种具有内置date_sunrise函数的语言,可以告诉您太阳何时升起。我不确定转换是否需要DST,但它是日期对象的一级公民:http://php.net/manual/en/function.date.php。 - Paul Draper
1
我认为询问是否为夏令时是可以的。在没有额外信息的情况下,无法从本地时间+时区转换为明确的UTC时间。这是因为在夏令时结束期间,某些本地时间会出现两次。 - Tom
@Tom:我非常清楚本地时间会出现两次的情况,但这并不意味着在转换本地时间时指定是否处于夏令时是一个好主意。在我看来,最好的做法是在存在歧义的情况下指定一种解决方案。我更喜欢API避免让你表达不可能的情况,比如1月份的EDT。 - Jon Skeet
@Tom:看看我的Noda Time API的例子吧 :) “正确的做法”真的取决于应用程序。 - Jon Skeet
1
如果你对如何在PHP中处理时区感到困惑,那是因为PHP太混乱了。这里有一篇很棒的文章解释了为什么PHP应该被淘汰:https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ - Lucent Fox
显示剩余2条评论

2

我也遇到了同样的问题,使用了这段代码:

date_default_timezone_set('UTC');
$nowdate = date('l jS \of F Y h:i:s A');
echo "Current date and time is: " . $nowdate;

现在是夏季,这段代码生成的时间比实际时间慢一个小时 - 因此我认为PHP中的UTC时间没有自动调整到夏令时。

有趣的是看看是否有人有解决方案...

编辑:

在论坛上找到了这段代码,完美解决了问题!

date_default_timezone_set('Europe/London');
$TIME =  date("m/d/Y H:i",time());

所以,您可以使用$TIME调用当前日期和时间。通过更改date()标记内的位,可以调整输出以显示不同的格式。如果您想要调整date()的输出,请使用此指南:http://php.net/manual/en/function.time.php

希望这能帮到您 :)


那么,这是正确的,因为当您将时区设置为UTC时,在夏季您会得到比本地时间(伦敦)早一个小时的时间。https://www.timeanddate.com/time/zone/uk/london - Kaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接