首页 > 其他分享 >为什么减去这两个纪元毫秒值(在1927年)会得到一个奇怪的结果?

为什么减去这两个纪元毫秒值(在1927年)会得到一个奇怪的结果?

时间:2023-10-06 12:56:18浏览次数:40  
标签:12 23 54 31 毫秒 1927 纪元

内容来自 DOC https://q.houxu6.top/?s=为什么减去这两个纪元毫秒值(在1927年)会得到一个奇怪的结果?

在Java中,Date对象的getTime()方法返回的是从1970年1月1日00:00:00 GMT开始的毫秒数。当你解析日期字符串时,这些毫秒数是基于GMT的。然而,你的程序运行的环境时区是Asia/Shanghai,其偏移量为28800000毫秒。

因此,当你计算两个日期之间的差异时,你实际上是在计算它们在GMT和Asia/Shanghai时区的偏移量之差。在你的例子中,"1927-12-31 23:54:07"和"1927-12-31 23:54:08"之间的差异是353秒,转换为毫秒就是353000毫秒。然后,这个差异被从"1927-12-31 23:54:07"的GMT时间(即1927年12月31日23:54:07加上353秒)中减去,得到的结果是1927年12月31日23:54:06.587,这就是你看到的输出。

如果你将日期改为"1927-12-31 23:54:08"和"1927-12-31 23:54:09",那么这两个日期之间的差异就是1秒,转换为毫秒就是1000毫秒。然后,这个差异被从"1927-12-31 23:54:08"的GMT时间(即1927年12月31日23:54:08加上1秒)中减去,得到的结果是1927年12月31日23:54:07.999,这正好是1,这就是为什么你看到的输出是1的原因。


1927年12月31日,上海时区发生了一次变化。

请查看 这个页面 获取1927年12月31日在上海的详细时间信息。基本上,在1927年底午夜时分,时钟倒退了5分钟52秒。因此,“1927-12-31 23:54:08”实际上发生了两次,看起来Java将其解析为该本地日期/时间更晚的可能时刻,因此出现了差异。

这只是经常奇怪和美妙的时区世界中的一个插曲。

如果使用TZDB 2013a版本重新构建,原始问题将不再展示完全相同的行为。在2013a中,结果将是358秒,而过渡时间是23:54:03而不是23:54:08。

我只是在Noda Time中以单元测试的形式收集这样的问题,这使我注意到了这个差异 - 甚至历史数据也不安全。

在TZDB 2014f中,时区变化的时间已经移动到1900年12月31日,现在只是一个只有343秒的变化(所以如果你明白了我的意思,在t和t+1之间的时间是344秒)。


回答一个关于1900年转换的问题,看起来Java时区实现将所有时区都视为在任何1900年UTC开始之前的任何瞬间的标准时间:

import java.util.TimeZone;

public class Test {
    public static void main(String[] args) throws Exception {
        long startOf1900Utc = -2208988800000L;
        for (String id : TimeZone.getAvailableIDs()) {
            TimeZone zone = TimeZone.getTimeZone(id);
            if (zone.getRawOffset() != zone.getOffset(startOf1900Utc - 1)) {
                System.out.println(id);
            }
        }
    }
}

上面的代码在我的Windows机器上没有输出。因此,任何在1900年开始时具有除标准偏移量之外的任何其他偏移量的时区都将将该转换计算为一个过渡。TZDB本身有一些更早的数据,并且不依赖于任何“固定”标准时间的概念(这是getRawOffset假设为有效概念的想法),因此其他库不需要引入这种人为的过渡。

标签:12,23,54,31,毫秒,1927,纪元
From: https://www.cnblogs.com/xiaomandujia/p/17744454.html

相关文章

  • python获取年月日时分秒毫秒
     fromdatetimeimportdatetime#获取当前时间now=datetime.now()#获取年、月、日、时、分、秒和毫秒year=now.yearmonth=now.monthday=now.dayhour=now.hourminute=now.minutesecond=now.secondmillisecond=now.microsecond//1000#毫秒需......
  • 数字化升级:工业互联网的崭新纪元
    工业互联网,作为数字化革命的引擎,正以前所未有的速度和力度改变着我们的世界。这一概念不再局限于企业内部的信息技术应用,而是将互联网、大数据、人工智能等技术深度融入到制造业、能源、交通、农业等各个领域,实现了设备、系统、人员之间的高度互联互通。 工业互联网的兴起,为企......
  • 武汉星起航电子商务有限公司:开创跨境电商新纪元
    随着国内电商市场的逐渐饱和,中国的企业和创业者们正在寻找新的机会,而跨境电商行业正迅速崛起,为他们提供了前所未有的发展机遇。在这一充满活力的领域里,武汉星起航电子商务有限公司脱颖而出,成为业内实力雄厚的亚马逊跨境电商孵化服务商,为卖家们开创了崭新的商业前景。国内电商市场已......
  • MySQL DateTime 可以支持到毫秒
    DATETIMEDATETIME在数据库中存储的形式为:YYYY-MM-DDHH:MM:SS,固定占用8个字节。从MySQL5.6版本开始,DATETIME类型支持毫秒,DATETIME(N)中的N表示毫秒的精度。例如,DATETIME(3)表示可以存储3位的毫秒值。 推荐使用 DATETIME而非timestamp,因为 timestamp可能有......
  • 18-时间表示-unix时间点-毫秒和微秒-time模块
        ......
  • VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?
    技术背景虚拟现实(VR)技术的互动性和沉浸感,为我们提供了一种全新的视觉体验,不过,如果需要实现真正的沉浸式体验,VR播放的延迟问题非常重要。好多VR场景下,如果存在延迟,用户在移动头部时可能会感觉到画面反应不及时,导致影响视频的流畅度。在VR电影或VR直播中,延迟则可能导致画面和声音的实......
  • 提升生产力:ChatGPT for Excel引领数据处理新纪元
    在现代商务环境中,微软Excel已成为不可或缺的工具,用于数据处理、分析和展示。为了更好地满足用户的需求,ChatGPTforExcel应运而生,为Excel用户量身打造了一款终极工具。它利用人工智能的力量,旨在提升用户的生产力,让数据处理变得更加智能、高效。本文将深入介绍ChatGPTforExcel的作......
  • 网页播放海康,威视,大华,华为摄像头RTSP流,延迟毫秒级,支持多路播放、H.264/H.265
    一、背景:在遍地都是摄像头的今天,往往需要在各种信息化、数字化、可视化B/S系统中集成实时视频流播放等功能,海康、大华、华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输协议RTSP输出,而Chrome、Firefox、Edge等新一代浏览器从2015年开始取消了NPAPI......
  • JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践 | 京东云技术团队
    前言自2014年发布以来,JDK8一直都是相当热门的JDK版本。其原因就是对底层数据结构、JVM性能以及开发体验做了重大升级,得到了开发人员的认可。但距离JDK8发布已经过去了9年,那么这9年的时间,JDK做了哪些升级?是否有新的重大特性值得我们尝试?能否解决一些我们现在苦恼的......
  • JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践
    前言自2014年发布以来,JDK8一直都是相当热门的JDK版本。其原因就是对底层数据结构、JVM性能以及开发体验做了重大升级,得到了开发人员的认可。但距离JDK8发布已经过去了9年,那么这9年的时间,JDK做了哪些升级?是否有新的重大特性值得我们尝试?能否解决一些我们现在苦恼......