UTC是否遵守夏令时?


83

我正在尝试编写一个脚本,在该脚本中我想将任何时区转换为UTC反向。但是从某些地方我知道,在将任何时区转换为UTC 带或不带DST的情况下,它都会给出相同的UTC时间。例如:如果我尝试将其转换为:

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

到具有DST而没有DST的UTC,我将获得..

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

这是核心吗?如果是,那么为什么?请任何人给我你的答案。


如果您向我们展示脚本,我们可以为您提供更好的帮助。
凯文·漆

4
而且,在回答您的标题问题时,没有UTC不会节省夏令时;但是,其他区域也可以。
凯文·漆

Answers:


137

不,UTC本身从来没有DST。它是相对于其他时区表示的恒定参考框架。

Wikipedia UTC页面上

UTC不会随季节的变化而变化,但是如果时区辖区遵守夏令时或夏令时,则当地时间或民事时间可能会发生变化。例如,冬季时UTC比美国东海岸的当地时间早5小时,而夏季则比当地时间早4小时。

换句话说,当一个时区观察到DST时,它与UTC的偏移量会在DST转换时发生变化,但这就是观察DST的时区,而不是UTC。

在不了解PHP时区处理的情况下,让我感到奇怪的是,您可以在转换中指定“带有DST”或“不带DST”-时区本身指定DST何时开始...它不必您指定自己的东西。


1
“在不了解PHP时区处理的情况下,在转换中指定'with DST'或'without DST'对我来说似乎很奇怪” ...这可能是因为您没有做太多可编程超链接面食。这是一种内置date_sunrise函数的语言,可以告诉您何时太阳升起。我不确定是否需要DST进行转换,但是它是日期对象的一等公民:php.net/manual/en/function.date.php
Paul Draper 2014年

@PaulDraper:作为日期对象的一等公民有一定的意义-只是没有为转换单独指定它。从那以后,我已经学到了一些有关底层C例程的更多信息,我怀疑它们与这有很大关系……
Jon Skeet 2014年

1
我认为可以询问是否是DST。没有该额外信息,就无法从本地时区+时区移至明确的UTC时间。这是因为在从DST过渡期间,某些本地时间会发生两次。
汤姆(Tom)

@Tom:我非常了解本地时间发生两次,但这并不意味着在转换本身中指定本地时间是否在DST中是一个好主意。这是更好- IMO -指定解决不确定性的一种方式,如果它是不明确的。我更喜欢API,以避免让您表达不可能的情况,例如在一月份的EDT。
乔恩·斯基特

1
如果您对如何在PHP中进行时区感到困惑,那是因为PHP混乱不堪,以下
朗讯·福克斯

1

使用此代码,我遇到了同样的问题:

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时间会适应DST。

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

编辑:

在论坛上找到此代码,效果很好!

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

希望这可以帮助 :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.