Unix时间戳如何解释夏令时?

时间:2013-08-30 10:19:48

标签: php unix-timestamp

我一直在研究Unix时间戳如何解释夏令时问题,这里似乎有很多错综复杂的答案,关于它并不重要或只是将其设置为欧洲/伦敦或使用获取当地时间的函数。这仍然不能解释夏令时!这是一些测试代码:

date_default_timezone_set('Europe/London');
$timestamp_time = date("hi", 1377853200);

echo $timestamp_time;

这将比实际时间快一小时返回时间戳的小时和分钟(设置为上午9点,早上10点返回)。这个时间戳是使用设置为GMT(+0)的在线转换器制作的,我使用了各种转换器,因此它不仅仅是这个被破坏了。我必须将GMT用于此项目。任何人都可以澄清我如何允许夏令时或是否已经允许?同样快速解释为什么它做了什么会非常有用。

我想最后我需要知道如何继续,我是否可以使用我的代码来允许它,例如,如果冬季月份-1个小时在夏季+ 1小时?这似乎是一个荒谬的解决方案......任何帮助都会很棒。 谢谢。

2 个答案:

答案 0 :(得分:4)

unix时间戳不包含任何时区数据。它是UTC,没有DST设置。

您应该将时间(例如,使用php中的DateTime()和DateTimeZone()类)转换为正确的时区,并根据日期自动调整DST和时区偏移量。

答案 1 :(得分:0)

尝试使用setlocale设置适当的区域设置,然后使用strftime解析日期。 php.net有一个相当详细的例子来说明如何在这里实现:http://php.net/manual/en/function.setlocale.phpstrftime将时间戳作为参数,因此不需要转换。

您的代码看起来像是

setlocale("en_GB"); // example

$timestamp_time = strftime("%H%M", 1377853200);

echo $timestamp_time;