java - 为什么当日期在 1970-01-01 之后时 java.sql.Timestamp 返回负值
问题描述
Timestamp timestamp = Timestamp.valueOf("1970-01-01 01:00:00");
System.out.println(timestamp.getTime());
知道这段代码返回 -25200000 吗?我认为 1970-01-01 00:00:00 之后的时间将会是积极的。
解决方案
您正在使用一个糟糕的日期时间类,该类在几年前被JSR 310 中定义的现代java.timejava.sql.Timestamp
类所取代。永远不要使用.
将您的输入解析为 a LocalDateTime
,因为它缺少时区指示符或与 UTC 的偏移量。将中间的空格替换为 aT
以符合日期时间格式的 ISO 8601 标准。
String input = "1970-01-01 01:00:00".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;
显然,您的意思是代表 UTC 中的一个时刻。应用偏移量以获得OffsetDateTime
.
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
获取自 1970 年 UTC 第一时刻的纪元参考以来的毫秒数。
long millis = odt.toInstant().toEpochMilli() ;
360万
推荐阅读
- javascript - Odoo9:如何用JS将两个字段的值组合成第三个?
- java - 应用程序网站设计(非 WebView)
- python - 由于 ImportError,Celery Django 部署因 Elastic Beanstalk 失败:无法导入名称“Celery”(ElasticBeanstalk::ExternalInvocationError)
- arrays - DispatchWorkItem 不会立即取消任务
- php - 使用公共应用程序将 Xero API 与 Laravel 集成的问题 - 需要手动操作
- javascript - 实施 Polyfill 的问题
- amazon-web-services - AWS Cloudformation 用户数据问题
- jquery - 未捕获的 TypeError:b.ready.promise 不是函数
- remote-debugging - Intershop7 - 远程管道调试 - 客户端未注册异常
- excel - “运行时错误 13:不匹配”错误 - 在 vba 中粘贴