簡體   English   中英

PHP 是否檢測到錯誤的柏林時區?

[英]Is PHP detecting a wrong timezone for Berlin?

代碼塊應該能夠自己說話。 時區Europe/Berlin被檢測為+02:00但行為類似於+01:00 當我專門使用+02:00作為時區時,它按預期工作。 誰能向我解釋這里發生了什么?

>>> $timezone = new DateTimeZone('Europe/Berlin')
=> DateTimeZone {#2356
     timezone: Europe/Berlin (+02:00),
   }
>>> $timestamp = DateTime::createFromFormat('Y-m-d\TH:i:s.uO', '2020-02-29T07:30:00.000+0100')
=> DateTime @1582957800 {#2349
     date: 2020-02-29 07:30:00.0 +01:00,
   }
>>> $timestamp->setTimezone($timezone)
=> DateTime @1582957800 {#2349
     date: 2020-02-29 07:30:00.0 Europe/Berlin (+01:00),
   }
>>> $timezone = new DateTimeZone('+02:00')
=> DateTimeZone {#2371
     timezone: +02:00,
   }
>>> $timestamp = DateTime::createFromFormat('Y-m-d\TH:i:s.uO', '2020-02-29T07:30:00.000+0100')
=> DateTime @1582957800 {#2364
     date: 2020-02-29 07:30:00.0 +01:00,
   }
>>> $timestamp->setTimezone($timezone)
=> DateTime @1582957800 {#2364
     date: 2020-02-29 08:30:00.0 +02:00,
   }

柏林在標准時間(在英語中稱為中歐時間,或 CET)使用+01:00的 UTC 偏移量,在夏令時(在英語中稱為中歐夏令時,或 CEST)使用+02:00 參考這里。

在第一個示例中,您將柏林時間應用於 CET 生效時的2020-02-29 ,而不是 CEST。 因此,您會在結果中看到+01:00偏移量。 這是對的。

在第二個示例中,您沒有應用柏林時間,而是使用固定偏移量為+02:00的時區,因此您可以在結果中看到這一點。

另請參閱時區標簽 wiki中標題為“時區!= 偏移量”的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM