正如其他人所解释的那样,那里有一段时间不连续 . Asia/Shanghai 在 Asia/Shanghai 有两种可能的时区偏移,但 1927-12-31 23:54:07 只有一个偏移 . 因此,根据使用的偏移量,存在一秒差异或5分53秒差异 .

这种轻微的偏移转移,而不是我们习惯的通常的一小时夏令时(夏令时),有点模糊了问题 .

请注意,时区数据库的2013a更新在几秒钟之前移动了这种不连续性,但效果仍然可以观察到 .

Java 8上的新 java.time 包使用更清楚地看到它,并提供处理它的工具 . 鉴于:

DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();

dtfb.append(DateTimeFormatter.ISO_LOCAL_DATE);

dtfb.appendLiteral(' ');

dtfb.append(DateTimeFormatter.ISO_LOCAL_TIME);

DateTimeFormatter dtf = dtfb.toFormatter();

ZoneId shanghai = ZoneId.of("Asia/Shanghai");

String str3 = "1927-12-31 23:54:07";

String str4 = "1927-12-31 23:54:08";

ZonedDateTime zdt3 = LocalDateTime.parse(str3, dtf).atZone(shanghai);

ZonedDateTime zdt4 = LocalDateTime.parse(str4, dtf).atZone(shanghai);

Duration durationAtEarlierOffset = Duration.between(zdt3.withEarlierOffsetAtOverlap(), zdt4.withEarlierOffsetAtOverlap());

Duration durationAtLaterOffset = Duration.between(zdt3.withLaterOffsetAtOverlap(), zdt4.withLaterOffsetAtOverlap());

那么 durationAtEarlierOffset 将是一秒钟,而 durationAtLaterOffset 将是五分53秒 .

此外,这两个偏移是相同的:

// Both have offsets +08:05:52

ZoneOffset zo3Earlier = zdt3.withEarlierOffsetAtOverlap().getOffset();

ZoneOffset zo3Later = zdt3.withLaterOffsetAtOverlap().getOffset();

但这两者是不同的:

// +08:05:52

ZoneOffset zo4Earlier = zdt4.withEarlierOffsetAtOverlap().getOffset();

// +08:00

ZoneOffset zo4Later = zdt4.withLaterOffsetAtOverlap().getOffset();

您可以看到将 1927-12-31 23:59:59 与 1928-01-01 00:00:00 进行比较时遇到的问题相同,但在这种情况下,它是产生较长发散的较早偏移,而且它是具有两个可能偏移的较早日期 .

另一种方法是检查是否正在进行转换 . 我们可以这样做:

// Null

ZoneOffsetTransition zot3 = shanghai.getRules().getTransition(ld3.toLocalDateTime);

// An overlap transition

ZoneOffsetTransition zot4 = shanghai.getRules().getTransition(ld3.toLocalDateTime);

您可以检查转换是否是重叠 - 在这种情况下,该日期/时间有多个有效偏移量 - 或者间隙 - 在这种情况下,日期/时间对于该区域ID无效 - 使用 isOverlap() 和 isGap() zot4 上的方法 .

我希望这有助于人们在Java 8广泛使用后处理这类问题,或者使用采用JSR 310反向端口的Java 7的人 .

java处理1927 12 31_为什么减去这两次(在1927年)给出一个奇怪的结果?相关推荐

  1. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

  2. Java相邻数值后比大小后并分组_笔试题:给出一个数组,排序后,取相邻两值差的最大值...

    ε=(´ο`*)))   一个笔试题,就这样了,不想优化了   能出答案就行 import java.util.Scanner; /** * 需求:给出一个数组,排序后,取相邻两值差的最大值 */ p ...

  3. java中在方法体内抛出异常_Java异常处理中___用于方法体内,抛出一个异常对象。...

    Java异常处理中___用于方法体内,抛出一个异常对象. 答: throw; 智慧职教: 运输高致病性动物病原微生物菌(毒)种或者样本的,与内包装要求错误的是 答:E.主容器表面标注"高致病 ...

  4. java处理1927 12 31_java - 为什么将这两次相减(在1927年)会得出奇怪的结果? - 堆栈内存溢出...

    正如其他人解释的那样,那里存在时间不连续性. Asia/Shanghai对于1927-12-31 23:54:08有两种可能的时区偏移,但是对于1927-12-31 23:54:07只有一种偏移. 因 ...

  5. java最全人名数组_java 里有两个方法 第一个方法定义一个数组 每个数组都是一个学生类 每个学生有姓名 学号 年龄...

    匿名用户 1级 2015-12-01 回答 写了一半,剩下的自己来吧. /** * Filename:    student.java * Create at:   2015年11月30日 上午9:2 ...

  6. java array 元素的位置_java中的两种排序工具Arrays和Collections的使用

    java中的排序工具主要是有两个Arrays和Collections.我们一个一个来讲解. 本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可.因为 ...

  7. Java长存!12个Java长久占居主要地位的原因

    我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基本这么形容:没价值,腥臭,过时了,对你没好处.Jav ...

  8. Java黑皮书课后题第8章:**8.17(金融风暴)银行会互相借款……银行的总资产是它当时的余款减去它欠其他银行的贷款。如果一个银行的总资产在某个限以下,那么这个银行是不安全的。编写程序,找出所有不安

    **8.17(金融风暴)银行会互相借款--银行的总资产是它当时的余款减去它欠其他银行的贷款.如果一个银行的总资产在某个限以下,那么这个银行是不安全的.编写程序,找出所有不安全银行 题目 题目描述 破题 ...

  9. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)

    菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...

最新文章

  1. 按键的c语言代码表,各种按键模式的扫描
  2. ▲教你如何轻易的做linux计划任务▲——小菜一碟
  3. luogu P1007 独木桥
  4. POJ - 3680 Intervals(最大费用最大流+思维建边)
  5. (转)SQL 优化原则
  6. PHP独特学习模式_php基础知识
  7. mysql 单表union_在MySQL中用union合并两个表?
  8. pandas删除index与某一列有重复值所在的行
  9. 数学建模-7.多元线性回归分析
  10. python-字典方法(dict)知识整理
  11. git 合并指定目录到master
  12. 利用java打印出金字塔原理_《金字塔原理》的读后感作文2500字
  13. 时间序列数据挖掘综述
  14. 蓝桥 盾神与积木游戏(Java)
  15. 【美影】通灵男孩诺曼.Paranorman
  16. Android App开发实战之实现微信记账本(附源码 超详细必看)
  17. 9.28 正睿普及3
  18. 《伤逝——涓生的手记》,读后有感
  19. android adb 电池电量,adb 查看电池状态信息。详解
  20. 基于springboot的校园二手交易商城

热门文章

  1. HP-UX 11.31 安装RAC 添加共享磁盘的问题
  2. 计算机操作熟练说明,Mac新手必看教程,教你快速熟练mac电脑操作
  3. spark-ml和jpmml-sparkml生成pmml模型过程种遇到的问题
  4. 百度人脸识别的两个方式的使用
  5. Revit单构件导出IFC
  6. 却话文心一言(Chatgpt们),存算一体真能突破AI算力“存储墙”|“能耗墙”|“编译墙”?
  7. Sufficient Statistic (充分统计量)
  8. 20181212股票早盘
  9. oracle存小数用 number(m,n)
  10. 正确思维,和非理性自我斗争