在 Java 中将纪元秒转换为日期和时间格式
2022-09-01 12:32:46
自 1970 年 1 月 1 日 UTC(纪元时间)以来,我有秒数。
1320105600
我需要将秒数转换为以下格式的日期和时间。
Friday,November 4,2011 5:00,AM
我怎样才能做到这一点?
自 1970 年 1 月 1 日 UTC(纪元时间)以来,我有秒数。
1320105600
我需要将秒数转换为以下格式的日期和时间。
Friday,November 4,2011 5:00,AM
我怎样才能做到这一点?
如果您仅限于旧版和 API,则需要考虑到时间戳的解释时间以毫秒为单位,而不是以秒为单位。因此,您首先需要将其乘以1000才能获得以毫秒为单位的时间戳。java.util.Date
java.util.Calendar
long seconds = 1320105600;
long millis = seconds * 1000;
通过这种方式,您可以将其提供给java.util.Date的构造函数a.o.
,最后使用SimpleDateFormat
以所需的日期格式模式将a转换为,如有必要,请使用预定义的时区(否则它将使用系统默认时区,该时区本身不是GMT / UTC,因此格式化的时间可能已关闭)。java.util.Date
java.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