我在使用Java创建新日期时遇到问题。我从webservice收到一个时间戳(例如1397692800)。您可以在this在线转换器中看到,相当于2014年4月17日。 当我尝试在Java中使用此时间戳创建新日期时
Date date = new Date (1397692800);
控制台对我说,这相当于1970年1月17日星期六05:14:52 CET 1970.我的代码出了什么问题?
答案 0 :(得分:6)
自{1}}构造函数获取自Unix纪元以来毫秒的数量。我强烈怀疑自Unix时代以来你已经获得了秒的数量 - 所以只需将该值乘以1000L即可。
Date(long)
确保你使用1000L而不是1000,否则如果Date date = new Date(timestamp * 1000L);
是timestamp
,它将以32位而不是64位执行算术,你很可能会得到错误结果
答案 1 :(得分:1)
现代方法使用 java.time 类。
Instant instant = Instant.ofEpochSecond( 1_397_692_800L ) ;
instant.toString():2014-04-17T00:00:00Z
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?