时间戳是处理时间的一种简单方式,它是自 1970 年 1 月 1 日 (00:00:00 GMT)起经过的秒数或毫秒数。本文将介绍如何在 Java 中使用内置工具类将时间戳转换为日期时间,以及如何将日期时间转换为时间戳。
一、将时间戳转换为日期时间
我们通常使用 java.util.Date 和 java.util.Calendar 类来解析时间戳。其中,java.util.Date 是一个表示日期和时间的抽象类,java.util.Calendar 是一个用于操作日期和时间的类。
首先,将时间戳转换为 java.util.Date 对象,然后使用 SimpleDateFormat 类将其格式化为字符串。
long timestamp = 1633536123000L; // 时间戳,单位为毫秒 Date date = new Date(timestamp); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(date); System.out.println(formattedDate); // 输出:2021-10-06 15:35:23
在上述代码中,我们使用了 SimpleDateFormat 类,它可以将日期格式化为指定样式的字符串。在这里,我们将日期格式化为 "yyyy-MM-dd HH:mm:ss" 格式的字符串。
另外,还可以使用 java.time 包中的类来解析时间戳。java.time 包是在 Java 8 中引入的,其中包含了新的日期和时间 API。
long timestamp = 1633536123000L; // 时间戳,单位为毫秒 Instant instant = Instant.ofEpochMilli(timestamp); LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDate = dateTime.format(formatter); System.out.println(formattedDate); // 输出:2021-10-06 15:35:23
在上述代码中,我们使用了 Instant 和 LocalDateTime 类,Instant 类表示时间线上的一个瞬时点,而 LocalDateTime 类则表示一个日期-时间。我们可以使用 Instant.ofEpochMilli() 方法将时间戳转换为 Instant 对象,再使用 LocalDateTime.ofInstant() 方法将其转换为 LocalDateTime 对象。最后,使用 DateTimeFormatter 类将 LocalDateTime 格式化为字符串。
二、将日期时间转换为时间戳
将日期时间转换为时间戳,可以使用 java.util.Date 类中的 getTime() 方法。
String datetimeString = "2021-10-06 15:35:23"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(datetimeString); long timestamp = date.getTime(); System.out.println(timestamp); // 输出:1633536123000
在上述代码中,我们首先将字符串格式的日期时间转换为 java.util.Date 对象,然后使用 getTime() 方法将其转换为时间戳。
同样,也可以使用 java.time 包中的类来将日期时间转换为时间戳。
String datetimeString = "2021-10-06 15:35:23"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(datetimeString, formatter); long timestamp = dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); System.out.println(timestamp); // 输出:1633536123000
在上述代码中,我们先将日期时间字符串解析为 LocalDateTime 对象,然后调用 atZone() 方法将其转换为 ZoneDateTime 对象。接着使用 toInstant() 方法将其转换为 Instant 对象,最后使用 toEpochMilli() 方法将 Instant 转换为时间戳。
三、总结
借助 Java 提供的内置工具类,我们可以轻松地将时间戳转换为日期时间,或将日期时间转换为时间戳。其中,java.util.Date 和 java.util.Calendar 类较为传统,而 java.time 包中的类则是在 Java 8 中引入的新的日期和时间 API。