Unix 纪元时间转 Java Date 对象

发布于 2024-07-13 01:57:13 字数 420 浏览 5 评论 0原文

我有一个包含 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()。

I have a string containing the UNIX Epoch time, and I need to convert it to a Java Date object.

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

The marked line is where I'm having trouble. I can't work out what the argument to SimpleDateFormat() should be, or even if I should be using SimpleDateFormat().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

爱你是孤单的心事 2024-07-20 01:57:14
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
Smile简单爱 2024-07-20 01:57:14

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

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

To convert seconds time stamp to millisecond time stamp. You could use the TimeUnit API and neat like this.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

白云悠悠 2024-07-20 01:57:14

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

System.currentTimeMillis()

所以写作

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

应该有效(并且比日期解析快得多)

Hum.... if I am not mistaken, the UNIX Epoch time is actually the same thing as

System.currentTimeMillis()

So writing

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

should work (and be much faster that date parsing)

总以为 2024-07-20 01:57:13

怎么样:

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

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

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

How about just:

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

EDIT: as per rde6173's answer and taking a closer look at the input specified in the question , "1081157732" appears to be a seconds-based epoch value so you'd want to multiply the long from parseLong() by 1000 to convert to milliseconds, which is what Java's Date constructor uses, so:

Date expiry = new Date(Long.parseLong(date) * 1000);
沧笙踏歌 2024-07-20 01:57:13

Epoch 是自 1970 年 1 月 1 日以来的数。

因此:

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

有关更多信息:
http://www.epochconverter.com/

Epoch is the number of seconds since Jan 1, 1970..

So:

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

For more information:
http://www.epochconverter.com/

微暖i 2024-07-20 01:57:13

java.time

使用 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 时区中的日期,因为纪元是在 UTC 中定义的Java 使用的 Unix 时间

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

ZoneId zoneId = ZoneId.of( "America/Montreal" );

java.time

Using the java.time framework built into Java 8 and later.

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]

In this case you should better use ZonedDateTime to mark it as date in UTC time zone because Epoch is defined in UTC in Unix time used by Java.

ZoneOffset contains a handy constant for the UTC time zone, as seen in last line above. Its superclass, ZoneId can be used to adjust into other time zones.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文