java – 为什么不在启用夏令时的情况下运行服务器端应用程序?

我已经实现了一个服务器端应用程序,它记录了创建和更新记录时的时间戳.该应用程序假设服务器时钟没有启用夏令时,(a)因为我读过这是最佳做法和(b)因为我认为处理发生的歧义会很棘手(如果不是不可能的话),例如当时钟在十月份回归一个小时.

为安全起见,如果应用程序在启动时检测到DST已启用,则会记录错误并终止应用程序.即使应用服务器时钟启用了DST,我也会被内部利益相关者请求使应用程序正常工作.

我觉得尝试这样做是个愚蠢的事情,但我需要说服管理层.只是因为它使实现变得更加棘手,或者它是否存在根本上的缺陷,以至于这样的应用程序(记录时间戳)在一年中的任何时候都无法正确运行100%?在没有启用DST的情况下运行这样的应用程序的最佳理由是什么?

我想出的最好的是:

When daylight saving time is enabled there are two time discontinuities per year. Consider the following scenario,where a server is running in the UK with clock set to local time with daylight saving enabled:

  • At 2am on Oct 25 2009 the clock goes back one hour to 1am.
  • A record is created at 1.30am
  • The app (which must store timestamps in UTC) can’t tell whether this is 1.30am before or after the clock has gone back,and therefore can’t determine whether to include an extra hour in the adjustment to UTC.
  • 这是真的?实际上是否可以确定(在Java Web应用程序中)10月25日凌晨1点30分发生的事件是在时钟调整之前还是之后?

    避免夏令时的任何更好的理由?

    更新

    需要明确的是,应用程序必须将时间存储为UTC.问题是为什么在尝试这样做时,在服务器计算机上启用DST是一个坏主意.

    解决方法

    没有理由在服务器上禁止DST,因为时区(或者我应该说“应该”)只是格式化.系统时钟与时区无关.时间戳应该以明确的格式存储,或者像“epoch from epoch”一样存储,如System.currentTimeMillis()及其同类(与时区无关),或者作为指定UTC偏移量的文本(然后变得明确,如 ISO 8601) .

    相关文章

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
    今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
    Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
    本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...