Unix时代到Javadate对象

我有一个包含UNIX Epoch时间的string,我需要将其转换为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的答案,并仔细看看在问题中指定的input,“1081157732”似乎是一个秒为基础的纪元价值,所以你想乘以长从parseLong()1000年转换以毫秒为单位,这是Java的Date构造函数使用的,所以:

 Date expiry = new Date(Long.parseLong(date) * 1000); 

时代是自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及更高版本中内置的java.time框架。

 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时区中的date,因为Epoch是在Java使用的Unix时间中的UTC中定义的。

如上面最后一行所示, ZoneOffset为UTC时区提供了一个方便的常量。 它的超类ZoneId可以用来调整到其他时区。

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); 
 long timestamp = Long.parseLong(date) Date expiry = new Date(timestamp * 1000) 

嗯….如果我没有弄错,UNIX纪元时间实际上是一样的事情

 System.currentTimeMillis() 

所以写作

 try { Date expiry = new Date(Long.parseLong(date)); } catch(NumberFormatException e) { // ... } 

应该工作(并且parsingdate要快得多)

更好的是,使用JodaTime 。 分析string和string要容易得多。 线程也是安全的。 值得您花时间来实施它。

将秒时间戳转换为毫秒时间戳。 你可以使用TimeUnit API,并像这样整洁。

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)