PHP определяет неправильный часовой пояс для Берлина? - PullRequest
0 голосов
/ 07 мая 2020

Блок кода должен говорить сам за себя. Часовой пояс 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,
   }

1 Ответ

1 голос
/ 07 мая 2020

Берлин использует UT C смещение +01:00 в стандартное время (известное на английском языке sh как центральноевропейское время или CET) и +02:00 в летнее время (известное на английском языке sh как Центральноевропейское летнее время, или CEST). Ссылка здесь.

В первом примере вы применяете берлинское время к 2020-02-29, когда действовало CET, а не CEST. Таким образом, вы видите в результате смещение +01:00. Это правильно.

Во втором примере вы не применяете берлинское время, а применяете часовой пояс с фиксированным смещением +02:00, поэтому вы видите это в результате.

См. Также раздел «Часовой пояс! = Смещение» в вики-странице тега часового пояса .

...