java - Java:如何在 UTC 中获取“1000-01-01 00:00:00”的时间戳?
问题描述
我在两个不同的结果中得到了“1000-01-01 00:00:00”的时间戳。有人知道为什么吗?
TimeZone timeZone = TimeZone.getTimeZone(ZoneOffset.UTC);
GregorianCalendar calendar = new GregorianCalendar(timeZone);
calendar.clear();
calendar.set(1000, 0, 1, 0, 0, 0);
System.out.println(calendar.getTimeInMillis()); // print -30609792000000
System.out.println(ZonedDateTime.of(1000, 1, 1,0, 0, 0, 0, timeZone.toZoneId()).toInstant().toEpochMilli()); // print -30610224000000
解决方案
GregorianCalendar
尽管它的名称在 1582 年及以后引入公历之前使用儒略历。ZonedDateTime
相比之下,使用Proleptic Gregorian calendar,即将公历外推到当时未使用的世纪。
所以你真的在使用两个日历系统。这就解释了为什么你会得到两个不同的结果。
推荐阅读
- arrays - 如何使用 MongoDB 数据库在 Laravel 中获取数组
- git - Git不以交互方式添加特定行
- templates - 尝试将变量与 Twig 上的 html 标记内的字符串连接时出现问题
- python-3.x - 一个模型与 csv 矩阵的主题相似性
- python - 在 Python 中对数组进行无测试
- azure - Azure 服务总线转发死信消息转发
- azure - Azure App Service 请求需要 120 秒,但 IIS 说只需要 31 毫秒 - 这是怎么回事?
- linux - 使用最新的 cross_compiler 运行简单的 hello world 程序时得到非法指令
- elixir - 具有相对路径的 Elixir/Phoenix 文件上传文件夹
- python - Python:在递减集中使用 next 和 iter 检测循环