我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
这是我需要的一些JS代码:
var secDiff = Math.abs(Math.round((utc_date-this.premiere_date)/1000));
this.years = this.calculateUnit(secDiff,(86400*365));
this.days = this.calculateUnit(secDiff-(this.years*(86400*365)),86400);
this.hours = this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)),3600);
this.minutes = this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)-(this.hours*3600)),60);
this.seconds = this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)-(this.hours*3600)-(this.minutes*60)),1);
Run Code Online (Sandbox Code Playgroud)
我想在之前获得日期时间,但是如果正在使用DST,则日期将关闭1小时.我不知道如何检查DST是否正在使用中.
我如何知道夏令时的开始和结束时间?
我正在使用美国/纽约时区.在秋天,我们"退回"一小时 - 在凌晨2点有效地"获得"一小时.在转换点,会发生以下情况:
它是01:59:00 -04:00
然后1分钟后变成:01 :00:
00-05 :00
因此,如果您只是简单地说"凌晨1点30分",那么您是指第一次1:30滚动还是第二次推测是不明确的.我正在尝试将调度数据保存到MySQL数据库,无法确定如何正确保存时间.
这是问题:
"2009-11-01 00:30:00"在内部存储为2009-11-01 00:30:00 -04:00
"2009-11-01 01:30:00"在内部存储为2009-11-01 01:30:00 -05:00
这很好,也很合理.但是如何保存到01:30:00 -04:00呢?该文件没有显示指定偏移,因此,当我试图指定偏移它已经正式忽略任何支持.
我想到的唯一解决方案是将服务器设置为不使用夏令时的时区,并在我的脚本中进行必要的转换(我正在使用PHP).但这似乎不应该是必要的.
非常感谢任何建议.
我正在尝试编写一个脚本,我想将任何时区转换为UTC
和反转.但是在某些我知道的情况下,在将任何时区转换为UTC
有或没有DST考虑时,它将给出相同的UTC
时间.例如:如果我尝试转换这个:
$mytime = '2011-03-31 05:06:00.000';
$myzone = 'America/New_York';
Run Code Online (Sandbox Code Playgroud)
与DST和没有夏令时的UTC,我会得到..
(New_York->UTC DST=Yes)2011-03-31 09:06:00
(New_York->UTC DST=No)2011-03-31 09:06:00 ..........
Run Code Online (Sandbox Code Playgroud)
这是核心?如果是,那么为什么??? 请有人给我你的答案.
我有一个Java类,它接收位置的纬度/经度,并在夏令时开启和关闭时返回GMT偏移.我正在寻找一种简单的方法来确定Java当前日期是否为夏令时,因此我可以应用正确的偏移量.目前我只对美国时区执行此计算,但最终我还希望将其扩展到全球时区.
假设有一个重新发生的事件让我们说结束时间总是在同一个本地时间,比如说17:00,无论该时区是否开启夏令时.并且当DST在特定时区打开或关闭时,还要求不要手动更改时间.还要求每当任何其他系统通过API(即GetEndTimeByEvent)询问结束时间时,它总是以UTC格式发送结束时间.
方法1: 如果决定以UTC格式存储,则可以将其存储在数据库表中,如下所示.
Event UTCEndTime
=====================
ABC 07:00:00
MNO 06:00:00
PQR 04:00:00
Run Code Online (Sandbox Code Playgroud)
对于第一个事件ABC,UTC的结束时间是上午07:00,如果转换为从UTC到2012年7月1日当地时间显示,则将在当地时间17:00结束,如果在2012年10月10日转换( DST为时区的开启日期)然后将导致下午6点,这是不正确的结束时间.
我可以想到的一种可能的方法是将DST时间存储在附加列中,并在时区有DST ON时使用该时间.
方法2: 但是,如果它被存储为如下的本地时间,例如对于事件ABC,它将在任何日期始终为17:00,因为没有从UTC到本地时间的转换.
Event LocalEndTime
=======================
ABC 17:00:00
MNO 16:00:00
PQR 14:00:00
Run Code Online (Sandbox Code Playgroud)
应用程序层将本地时间转换为UTC时间,以通过(API GetEndTimeByEvent)发送到其他系统.
在这种情况下,以UTC格式存储时间仍然是个好主意吗?如果是,那么如何获得恒定的当地时间?
相关问题:是否有充分的理由将时间存储在UTC中?
在夏令时更改期间出现此问题.更改发生后,我们注意到我们的服务器应用程序开始写入日志错误的时间 - 提前一小时,这意味着.NET缓存时区偏移.我们必须重新启动应用程序才能解决此问题.我写了一个简单的应用程序来重现这个问题.当我在应用程序运行时更改时区时,DateTime.Now属性会在旧时区中生成时间.除了重新启动应用程序之外,有没有人知道这个问题是否有解决方法?
如果Cron的工作计划在凌晨2点和凌晨3点运行,那么这些工作将如何受到夏令时的影响?
当时间向后移动一小时的时间是从上午2:59:59直到凌晨2:00:00吗?这意味着凌晨2点的工作会运行两次而凌晨3点的工作会运行一次?或者是时间首先变为凌晨3:00:00然后凌晨2:00:00导致两个作业都运行两次?
当时间向前移动一小时的时间是从早上1:59:59到凌晨3:00:00导致凌晨2点的工作没有运行而凌晨3点的工作运行一次?或者时间从2:00:00变为凌晨3:00:00,导致两个作业都运行一次?
简而言之,我想知道的是,当上午3点钟发生一次或两次时,一小时就会发生一小时,并且在凌晨2点钟就会发生一小时的损失.在Google上查看时,我无法找到任何相关信息.
我在我的数据库中存储事件.我有'开始'和'结束'日期时间,'ticket_start'和'tickets_end'(用于门票销售实际开始/结束时 - 而不是实际事件的开始/结束).
到目前为止,我已经构建了一些方法来完成所有有趣的事情,例如在保存之前将日期/时间转换为GMT,然后返回到各自的时区进行显示.
我将时区存储在varchar字段中,其值为"America/New_York".
但是 - 现在我需要开始处理,如果用户想要允许重复事件.我以前做过,并没有那么重要,但从来没有涉及多个时区.
起初,我认为这没什么大不了的,但后来意识到 - 如果最初的开始日期是7月(例如),并且它每个月重复一年,在某些时候,夏令时将会成功因此,GMT的转换将以不同的方式改变时间.一个月,当转换为12:00时,它会将其更改为-5,然后,由于DST,它会将其更改为-4.
我目前的想法是,我将存储一个'dst'minitint(1),以确定是否在DST期间输入了开始/结束日期,然后在必要时制作一个方法将时间改变一小时.
但是 - 想想我会在这里问这里或许这是一个"正常",或者是一件我想不到的简单事情.
(cakephp 2.4.x)