4

我一直在研究 Unix 时间戳如何解释夏令时,这里似乎有很多令人费解的答案,这无关紧要,或者只是将其设置为欧洲/伦敦或使用获取当地时间的函数。这仍然没有考虑夏令时!这是一些测试代码:

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

echo $timestamp_time;

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

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

4

2 回答 2

4

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

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

于 2013-08-30T10:43:41.633 回答
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;
于 2013-08-30T10:48:03.200 回答