UTC 是不是遵守夏令时?
Posted
技术标签:
【中文标题】UTC 是不是遵守夏令时?【英文标题】:Does UTC observe daylight saving time?UTC 是否遵守夏令时? 【发布时间】:2011-07-26 15:10:03 【问题描述】:我正在尝试编写一个脚本,我想将任何时区转换为UTC
并反转。
但是从一些地方我了解到,在考虑或不考虑 DST 的情况下将任何时区转换为 UTC
时,它会给出相同的 UTC
时间。
例如:
如果我尝试转换这个:
$mytime = '2011-03-31 05:06:00.000';
$myzone = 'America/New_York';
到 UTC 与 DST 和没有 DST,我会得到 ..
(New_York->UTC DST=Yes)2011-03-31 09:06:00
(New_York->UTC DST=No)2011-03-31 09:06:00 ..........
这是正确的吗??如果是,那为什么??? 请任何人给我你的答案。
【问题讨论】:
如果您向我们展示脚本,我们可以为您提供更好的帮助。 而且,在回答您的标题问题时,没有 UTC 不遵守夏令时;但是,其他区域可能会。 【参考方案1】:不,UTC 本身从来没有 DST。它是其他时区相对于表示的恒定参考系。
来自Wikipedia UTC page:
UTC 不会随季节变化而变化,但如果时区管辖区采用夏令时或夏令时,则当地时间或民用时间可能会发生变化。例如,UTC 在冬季比美国东海岸的当地时间早 5 小时,但在夏季比当地时间早 4 小时。
换句话说,当一个时区遵守 DST 时,它与 UTC 的偏移会在 DST 转换时发生变化,但那个时区遵守 DST,而不是 UTC。
在不太了解 php 时区处理的情况下,您可以在转换中指定“带 DST”或“不带 DST”对我来说似乎很奇怪 - 时区本身指定 DST 何时开始......它不应该必须是您自己指定的内容。
【讨论】:
"在不了解 PHP 时区处理的情况下,您可以在转换中指定 'with DST' 或 'without DST' 对我来说似乎很奇怪"...这可能是因为您没有做了很多可编程超链接面食。这是具有内置date_sunrise
函数的语言,可以告诉您太阳何时升起。我不确定转换是否需要 DST,但它是日期对象的一等公民:php.net/manual/en/function.date.php。
@PaulDraper:成为日期对象的一等公民是有一定意义的——只是没有为转换单独指定它。不过,从那以后,我对一些底层 C 例程有了更多了解,我怀疑它们与此有很大关系……
我觉得问一下是不是夏令时没问题。如果没有额外的信息,就无法从本地时间+时区移动到明确的 UTC 时间。这是因为在退出 DST 期间,某些本地时间会出现两次。
@Tom:我非常清楚当地时间会出现两次,但这并不意味着在转换本身中指定当地时间是否在 DST 中是一个好主意。最好 - IMO - 指定一种解决歧义的方法如果它是模棱两可的。我更喜欢 API 以避免让您表达不可能的情况,例如 1 月的 EDT。
如果你对如何在 PHP 中设置时区感到困惑,那是因为 PHP 是一团糟,这里有一篇关于为什么 php 应该退役的精彩文章:eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design【参考方案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 时间不会调整为 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
希望这会有所帮助:)
【讨论】:
嗯,那是正确的,因为当您将时区设置为 UTC 时,在夏季,您会得到比本地时间晚一小时的时间(在伦敦)。 timeanddate.com/time/zone/uk/london以上是关于UTC 是不是遵守夏令时?的主要内容,如果未能解决你的问题,请参考以下文章