我有一个包含UNIX Epoch时间的字符串,我需要将其转换为Java Date对象.
String date = "1081157732"; DateFormat df = new SimpleDateFormat(""); // This line try { Date expiry = df.parse(date); } catch (ParseException ex) { ex.getStackTrace(); }
标记的线是我遇到麻烦的地方.我无法弄清楚SimpleDateFormat()的参数应该是什么,或者即使我应该使用SimpleDateFormat().
怎么样:
Date expiry = new Date(Long.parseLong(date));
编辑:根据rde6173的回答并仔细查看问题中指定的输入,"1081157732"似乎是一个基于秒的纪元值,所以你想要将long从parseLong()乘以1000来转换到毫秒,这是Java的Date构造函数使用的,所以:
Date expiry = new Date(Long.parseLong(date) * 1000);
Epoch是自1970年1月1日以来的秒数.
所以:
String epochString = "1081157732"; long epoch = Long.parseLong( epochString ); Date expiry = new Date( epoch * 1000 );
有关更多信息,请访问:http: //www.epochconverter.com/
使用java.time
Java 8及更高版本中内置的框架.
import java.time.LocalDateTime; import java.time.Instant; import java.time.ZoneId; long epoch = Long.parseLong("1081157732"); Instant instant = Instant.ofEpochSecond(epoch); ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]
在这种情况下,您最好将ZonedDateTime
其标记为UTC时区中的日期,因为Epoch是在Java使用的Unix时间内以UTC定义的.
ZoneOffset
包含UTC时区的便捷常量,如上面的最后一行所示.它的超类,ZoneId
可用于调整到其他时区.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
long timestamp = Long.parseLong(date) Date expiry = new Date(timestamp * 1000)