繁体   English   中英

Unix纪录时间到Java Date对象

[英]Unix epoch time to Java Date object

我有一个包含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及更高版本中内置的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时区中的日期,因为Epoch是在Java使用的Unix时间内以UTC定义的。

ZoneOffset包含UTC时区的便捷常量,如上面的最后一行所示。 它的超类ZoneId可用于调整到其他时区。

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

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

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

更好的是,使用JodaTime 更容易解析字符串和字符串。 线程也是安全的。 值得花时间去实现它。

哼哼......如果我没弄错的话,UNIX Epoch的时间实际上和它一样

System.currentTimeMillis()

所以写作

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM