正如其他人解释的那样,那里存在时间不连续性。 Asia/Shanghai对于1927-12-31 23:54:08有两种可能的时区偏移,但是对于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);

您可以使用isOverlap()检查过渡是否是重叠的(在这种情况下,该日期/时间有多个有效偏移量)或间隔(在这种情况下,日期/时间对那个区域ID无效isOverlap()和isGap()上的方法zot4 。

我希望这可以帮助人们在Java 8广泛可用之后,或者对于那些采用JSR 310反向移植的使用Java 7的人们,解决此类问题。

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

  1. oracle 异常返回值,oracle - java.sql.SQLException:无效的列类型:调用具有行类型返回值的函数时为1111 - 堆栈内存溢出...

    我在一个名为" MyPackage"的Oracle软件包中有一个函数: FUNCTION MyFunction(name IN VARCHAR2) RETURN MyTable%r ...

  2. java画个半径为1地圆_java - 绘制一个半径为圆的圆并围绕边缘指向 - 堆栈内存溢出...

    圆上的点可以指定为角度θ的函数: x = a + r cos(θ) y = b + r sin(θ) 这里,示出了2π/ 8的增量. 附录:正如@ChristofferHammarström在评论中所 ...

  3. Java筛选重复名字输出单一的,java - 输入:一个单词的字符串。 打印给定字符串的所有重排,而无需重复。 爪哇 - 堆栈内存溢出...

    这是我想到的最简单的方法 String str= "abc"; ArrayList letters = new ArrayList(); HashSet combinations ...

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

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

  5. 为什么将这两次相减(在1927年)会得出奇怪的结果?

    如果我运行以下程序,该程序将解析两个日期字符串,它们分别引用间隔为1秒的时间并进行比较: public static void main(String[] args) throws ParseExce ...

  6. java随机产生若干个偶数完成求和_java - 创建随机生成器以生成并计算奇数对偶数 - 堆栈内存溢出...

    我真的非常困惑. 我已经进行过几次网络搜索,但找不到任何可以帮助我解决这一精确作业问题的信息. 涉及:Java,while循环,随机生成数字和扫描仪控制台输入. 我们必须完成main方法中的代码,以便 ...

  7. axis2 java客户端内存溢出怎么办_java - Axis2-总是出现404错误 - 堆栈内存溢出

    我试图将一些Web服务存根从Metro移到Axis2,但是在使用wsdl2java生成存根后,每次尝试进行服务调用时,我都会不断收到404错误. 16/12/2010 11:14:57 AM org. ...

  8. java 处理byte_java - 文件到Java中的byte [] - 堆栈内存溢出

    ===============>>#1 票数:1222 例: import java.io.File; import java.nio.file.Files; File file; // ...

  9. android和flask交互,java - 当我从Android向Flask Web服务发送参数时,如何解决“ SSL库故障”? - 堆栈内存溢出...

    我确实尝试将一些值作为" application / json "从Android应用程序发送到Flask Web服务. 这是我的Java代码 : Thread thread = ...

最新文章

  1. 题目1176:树查找
  2. Linux(二)——基础入门(2)
  3. 常用的Linux命令合集,建议收藏保存!
  4. jQuery Mobile Data 属性
  5. pytorch修改tensor的维度(修改为任意维度,或单纯的增减维度)
  6. 【Flink】Flink Flink 1.14 新特性预览
  7. java 命名参数动态替换_使用Kettle的命名参数动态执行作业
  8. (c语言)求x的y次方
  9. 1145: 零起点学算法52——数组中删数II
  10. vscode 转到实现方法失效_动图炫技23个鲜为人知的VS Code快捷键
  11. HashMap底层结构
  12. npp 插件html,Notepad++中常用的插件
  13. excel教程自学网_企业Office办公软件自学视频教程word/excel/ppt 2003 2013 2016全套
  14. 今日头条推荐算法相关博客集合
  15. 大数据在生活中有什么应用(一)
  16. 移动200/300M网速只有最高5M/s(3G太快了),提高网速的办法和具体处理方式
  17. kali虚拟机小键盘区不能使用解决
  18. UnityShader 图片像素化风格渲染
  19. Android 5.1.1 源码目录结构说明
  20. 交易码 MWS X7 会计科目表 XXX 没有在表 T030K 中定义/交易码 VST J2 会计科目表 XXX 没有在表 T030K 中定义

热门文章

  1. python dlib人脸识别_python3+dlib人脸识别及情绪分析
  2. 刚入职一个月的程序猿
  3. java中这些判断空的用法,太优雅了
  4. 计算机程序设计员技能试题,计算机程序设计员理论试题库
  5. Obsolete和Conditional属性
  6. 一张图看懂在北京买房不同贷款方式的差别
  7. odoo tree 颜色设置decoration
  8. mysql数据库巡检方案_Mysql数据库巡检
  9. [框架之谈]极佳的 JS 移动应用程序开发框架
  10. [转]数据挖掘在金融行业十大应用