97

我有一个包含UNIX Epoch time的字符串,我需要将其转换为 Java Date 对象。

String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
  Date expiry = df.parse(date);
 } catch (ParseException ex) {
  ex.getStackTrace();
}

标记线是我遇到麻烦的地方。我无法弄清楚 SimpleDateFormat() 的参数应该是什么,或者即使我应该使用 SimpleDateFormat()。

4

7 回答 7

141

怎么样:

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

编辑:根据rde6173的回答并仔细查看问题中指定的输入,“1081157732”似乎是基于秒的纪元值,因此您需要将 parseLong() 的 long 乘以 1000 以进行转换到毫秒,这是 Java 的 Date 构造函数使用的,所以:

Date expiry = new Date(Long.parseLong(date) * 1000);
于 2009-02-11T00:57:31.847 回答
42

纪元是自 1970 年 1 月 1 日以来的秒数。

所以:

String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );

欲了解更多信息: http ://www.epochconverter.com/

于 2009-02-11T01:00:53.320 回答
28

java.time

使用java.timeJava 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" );
于 2015-12-23T21:43:09.173 回答
9
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
于 2009-02-11T00:56:24.267 回答
0

更好的是,使用JodaTime。更容易解析字符串并转换成字符串。也是线程安全的。值得您花时间来实施它。

于 2009-02-11T01:23:11.987 回答
0

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

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

于 2015-03-26T00:04:25.953 回答
-1

嗯....如果我没记错的话,UNIX Epoch 时间实际上和

System.currentTimeMillis()

所以写

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

应该可以工作(并且比日期解析要快得多)

于 2009-02-11T00:57:51.003 回答