PHP 是否检测到错误的柏林时区?

代码块应该能够自己说话。时区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,

   }


一只名叫tom的猫
浏览 92回答 1
1回答

烙印99

+01:00柏林在标准时间(英文称为中欧时间或 CET)和+02:00夏令时(英文称为中欧夏令时或 CEST)期间 使用 UTC 偏移量。在第一个示例中,您将柏林时间应用于2020-02-29CET 生效的时间,而不是 CEST。因此,您会+01:00在结果中看到一个偏移量。这是对的。在第二个示例中,您没有应用柏林时间,而是使用固定偏移量为 的应用时区+02:00,因此您会在结果中看到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP