我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
处理DateTime用户提供的本地值时,由于夏令时转换,很可能会产生无效或模糊的时间.
在其他语言和框架中,通常有一些方法,例如isAmbiguous和isValid时区的某些表示.例如在.NET中,有TimeZoneInfo.IsAmbiguousTime和TimeZoneInfo.IsInvalidTime.
许多其他时区实现具有类似的方法或功能来解决这个问题.例如,在Python中,pytz库将抛出一个AmbiguousTimeError或InvalidTimeError异常,你可以捕获.
PHP有很好的时区支持,但我似乎找不到任何解决这个问题的方法.我能找到的最接近的东西是DateTimeZone :: getTransitions.这提供了原始数据,因此我可以看到一些方法可以在此基础上编写.但它们是否已存在于某个地方?如果没有,任何人都可以提供良好的实施吗?我希望他们的工作方式如下:
$tz = new DateTimeZone('America/New_York');
echo $tz->isValidTime(new DateTime('2013-03-10 02:00:00')); # false
echo $tz->isAmbiguousTime(new DateTime('2013-11-03 01:00:00')); # true
Run Code Online (Sandbox Code Playgroud)