在 Java 中将纪元秒转换为日期和时间格式

2022-09-01 12:32:46

自 1970 年 1 月 1 日 UTC(纪元时间)以来,我有秒数。

1320105600

我需要将秒数转换为以下格式的日期和时间。

Friday,November 4,2011 5:00,AM

我怎样才能做到这一点?


答案 1

如果您仅限于旧版和 API,则需要考虑到时间戳的解释时间以毫秒为单位,而不是以秒为单位。因此,您首先需要将其乘以1000才能获得以毫秒为单位的时间戳。java.util.Datejava.util.Calendar

long seconds = 1320105600;
long millis = seconds * 1000;

通过这种方式,您可以将其提供给java.util.Date的构造函数a.o.,最后使用SimpleDateFormat以所需的日期格式模式将a转换为,如有必要,请使用预定义的时区(否则它将使用系统默认时区,该时区本身不是GMT / UTC,因此格式化的时间可能已关闭)。java.util.Datejava.lang.String

Date date = new Date(millis);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM

如果你已经在Java8上,有一个LocalDateTime#ofEpochSecond(),它允许你直接输入纪元秒,而不需要乘以毫秒的味道。

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM

答案 2
long yourSeconds = 1320105600L;
Date date = new Date(yourSeconds * 1000);

有关详细信息,请参阅此 javadoc。构造函数需要毫秒。

要以适当的格式显示此日期,您应该选中日期格式

下面是一个示例:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(df.format(date));