1. 引言
在Java中处理时间戳是一项常见的任务,它使我们能够更有效地操作和展示日期和时间信息,特别是在处理数据库或外部API时。
在这篇教程中,我们将探讨如何将一个Long
类型的时间戳转换为LocalDateTime
对象。
2. 理解Long
时间戳和LocalDateTime
2.1. Long
时间戳
Long
时间戳表示自1970年1月1日以来经过的毫秒数的特定时间点。具体来说,它是一个单一值,指示自纪元以来流逝的时间。
此外,在这种格式下处理时间戳对于计算是高效的,但在用户交互或显示目的时需要转换为可读的日期时间格式。
例如,Long值1700010123000L表示参考点2023-11-15 01:02:03。
2.2. LocalDateTime
java.time
包在Java 8中引入,提供了现代的日期和时间API。LocalDateTime
是该包中的一个类,可以存储和操作不同时区的数据和时间。
3. 使用Instant
类
Instant
类表示一个时间点,并且可以轻松转换为其他日期和时间表示形式。因此,要将Long
时间戳转换为LocalDateTime
对象,我们可以使用Instant
类,如下所示:
long timestampInMillis = 1700010123000L;
String expectedTimestampString = "2023-11-15 01:02:03";
@Test
void givenTimestamp_whenConvertingToLocalDateTime_thenConvertSuccessfully() {
Instant instant = Instant.ofEpochMilli(timestampInMillis);
LocalDateTime localDateTime =
LocalDateTime.ofInstant(instant, ZoneId.of("UTC"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = localDateTime.format(formatter);
assertEquals(expectedTimestampString, formattedDateTime);
}
在上述测试方法中,我们初始化一个名为timestampInMillis
的Long
变量为1700010123000L。此外,我们使用Instant.ofEpochMilli(timestampInMillis)
方法将Long
时间戳转换为Instant
。
接着,LocalDateTime.ofInstant(instant, ZoneId.of("UTC"))
方法使用UTC时区将Instant
转换为LocalDateTime
。
4. 使用Joda-Time
Joda-Time是Java中流行的日期和时间处理库,提供了一个与标准Java日期和时间API具有更直观接口的替代方案。
让我们探索如何使用Joda-Time将long
时间戳转换为格式化的LocalDateTime
字符串:
@Test
void givenJodaTime_whenGettingTimestamp_thenConvertToLong() {
DateTime dateTime = new DateTime(timestampInMillis, DateTimeZone.UTC);
org.joda.time.LocalDateTime localDateTime = dateTime.toLocalDateTime();
org.joda.time.format.DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String actualTimestamp = formatter.print(localDateTime);
assertEquals(expectedTimestampString, actualTimestamp);
}
在这里,我们根据提供的long
值实例化DateTime
对象。此外,DateTimeZone.UTC
方法明确地为DateTime
对象定义了时区为协调世界时间(UTC)。然后,toLocalDateTime()
函数无缝地将DateTime
对象转换为LocalDateTime
对象,保持了时间无关的表示。
最后,我们使用名为formatter
的DateTimeFormatter
将LocalDateTime
对象转换为字符串,遵循指定的模式。
5. 总结
总之,将Long
时间戳转换为LocalDateTime
对象的Java过程涉及利用Instant
类精确表示时间。这使得有效管理日期和时间信息成为可能,确保与数据库或外部API的无缝交互。
如往常一样,本文的完整代码示例可以在GitHub上找到:这里。