我在阅读来自apache phoenix的hbase api(使用’put’命令)创建的日期格式数据时遇到了问题。
这是我期望的日期格式:日期:2018-12-17T21:21:45 + 07:00 ……
也许这应该是一个评论,因为我无法解释出错的所有细节以及如何解决它。但是我可以看到你的问题来自于自纪元以来毫秒的符号位的反转。我试过这个:
long milli = OffsetDateTime.parse("2018-12-17T21:21:45+07:00").toInstant().toEpochMilli(); milli += Long.MIN_VALUE; // Flip the sign bit Date wrongDateAsOldfashiondDate = new Date(milli); System.out.println(wrongDateAsOldfashiondDate); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(wrongDateAsOldfashiondDate));
我的电脑(欧洲/哥本哈根时区)的输出是:
Fri Nov 18 08:08:49 CET 292269006 292269006-11-18
通常不应该使用旧的和设计不佳的 Date 上课,但这是我能得到与你完全相同的结果。与现代日期和时间API的区别在于 Date 使用朱利安日历,显然这也被软件使用,给你意想不到的结果(可能是 Date 班级也参与其中)。
Date