首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当日期在1970-01-01之后时,为什么java.sql.Timestamp返回负值

当日期在1970-01-01之后时,为什么java.sql.Timestamp返回负值
EN

Stack Overflow用户
提问于 2020-04-21 18:17:31
回答 1查看 194关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
Timestamp timestamp = Timestamp.valueOf("1970-01-01 01:00:00");
System.out.println(timestamp.getTime());

你知道这段代码返回-25200000吗?我以为1970-01-01 00:00:00之后的时间会是正数。

EN

回答 1

Stack Overflow用户

发布于 2020-04-21 23:21:26

您正在使用一个可怕的日期-时间类,这个类在几年前就被JSR310中定义的现代java.time类所取代。切勿使用java.sql.Timestamp

将您的输入解析为LocalDateTime,因为它缺少时区或与UTC的偏移量的指示器。将中间的空格替换为T,以符合日期时间格式的ISO8601标准。

代码语言:javascript
代码运行次数:0
运行
复制
String input = "1970-01-01 01:00:00".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

显然,你的意思是让它代表UTC中的一个时刻。应用偏移量以获取OffsetDateTime

代码语言:javascript
代码运行次数:0
运行
复制
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

获取自1970年第一个时刻的纪元引用以来的毫秒计数。

代码语言:javascript
代码运行次数:0
运行
复制
long millis = odt.toInstant().toEpochMilli() ;

3600000

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61341120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档