我一直在研究Unix时间戳如何解释夏令时问题,这里似乎有很多错综复杂的答案,关于它并不重要或只是将其设置为欧洲/伦敦或使用获取当地时间的函数。这仍然不能解释夏令时!这是一些测试代码:
date_default_timezone_set('Europe/London');
$timestamp_time = date("hi", 1377853200);
echo $timestamp_time;
这将比实际时间快一小时返回时间戳的小时和分钟(设置为上午9点,早上10点返回)。这个时间戳是使用设置为GMT(+0)的在线转换器制作的,我使用了各种转换器,因此它不仅仅是这个被破坏了。我必须将GMT用于此项目。任何人都可以澄清我如何允许夏令时或是否已经允许?同样快速解释为什么它做了什么会非常有用。
我想最后我需要知道如何继续,我是否可以使用我的代码来允许它,例如,如果冬季月份-1个小时在夏季+ 1小时?这似乎是一个荒谬的解决方案......任何帮助都会很棒。 谢谢。
答案 0 :(得分:4)
unix时间戳不包含任何时区数据。它是UTC,没有DST设置。
您应该将时间(例如,使用php中的DateTime()和DateTimeZone()类)转换为正确的时区,并根据日期自动调整DST和时区偏移量。
答案 1 :(得分:0)
尝试使用setlocale
设置适当的区域设置,然后使用strftime
解析日期。 php.net有一个相当详细的例子来说明如何在这里实现:http://php.net/manual/en/function.setlocale.php。 strftime
将时间戳作为参数,因此不需要转换。
您的代码看起来像是
setlocale("en_GB"); // example
$timestamp_time = strftime("%H%M", 1377853200);
echo $timestamp_time;