DateTimeFormatter生成时间戳
时间: 2023-11-07 21:53:36 浏览: 93
您可以使用`DateTimeFormatter`类来生成时间戳。下面是一个示例代码:
```java
import java.time.Instant;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
String timestamp = formatter.format(instant);
System.out.println("Timestamp: " + timestamp);
}
}
```
这段代码将使用`DateTimeFormatter`将当前时间戳格式化为"yyyy-MM-dd HH:mm:ss.SSS"的字符串格式。您可以根据需要选择不同的时间戳格式,具体的格式化模式可以参考Java官方文档中关于`DateTimeFormatter`类的说明。
相关问题
将以下代码生成的时间戳换算成yyyy-MM-dd HH-mm-ss形式的 LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); long time = ldt.toEpochSecond(ZoneOffset.ofHours(8));
可以使用以下代码将时间戳转换为yyyy-MM-dd HH-mm-ss格式:
```
long timestamp = time * 1000; // 将时间戳转换为毫秒级别
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = Instant.ofEpochMilli(timestamp)
.atZone(ZoneId.of("Asia/Shanghai"))
.format(formatter);
System.out.println(formattedDateTime); // 输出格式化后的时间
```
其中,将时间戳转换为毫秒级别是因为Java中的时间戳表示的是以秒为单位的时间戳,而我们需要的是以毫秒为单位的时间戳。然后,使用DateTimeFormatter指定输出的时间格式,并使用Instant和ZoneId将时间戳转换为LocalDateTime对象。最后,使用format方法将LocalDateTime对象格式化为字符串形式。
LocalDateTime取精确时间戳
### 使用 Java `LocalDateTime` 获取精确时间戳
为了获取更精确的时间戳,通常会使用纳秒级别的精度。下面展示了如何通过 `LocalDateTime` 结合其他类来实现这一目标。
#### 方法一:基于当前时间点
可以直接调用静态方法 `now()` 来创建代表当前时刻的对象实例,并进一步将其转换成自1970年1月1日以来经过的毫秒数或秒数加上额外的小数部分表示更高精度:
```java
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.Instant;
// 创建 LocalDateTime 对象并转化为 Instant 类型以便于计算时间戳
Instant instant = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();
long epochMilli = instant.toEpochMilli(); // 获得毫秒级时间戳
double preciseTimestamp = epochMilli + (instant.getNano() / 1_000_000D); // 加上微秒级别偏移量得到更加精准的结果
System.out.println("Precise timestamp: " + preciseTimestamp);
```
此代码片段先利用 `LocalDateTime.now()` 取得本地当前时间,再借助 `atZone()` 函数指定默认时区后转为带有时区信息的时间对象 (`ZonedDateTime`) ,最后通过 `toInstant()` 将其变为标准 UTC 时间格式(`Instant`) 。这样就可以方便地访问到 Unix Time Stamp 的值了[^4]。
#### 方法二:给定特定日期时间字符串的情况
如果已经有了一个具体的日期时间字符串,则可以通过解析该字符串生成对应的 `LocalDateTime` 实例来进行相同的操作:
```java
import java.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.Instant;
String dateTimeStr = "2023-10-05T14:48:00";
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime ldt = LocalDateTime.parse(dateTimeStr, formatter);
Instant instantFromGivenTime = ldt.atZone(ZoneId.of("UTC")).toInstant();
long millisecondPrecision = instantFromGivenTime.toEpochMilli();
double nanosecondPrecision = millisecondPrecision + ((ldt.getNano()) / 1e9d);
System.out.printf("Timestamp with nano precision from given time string is %.6f%n",nanosecondPrecision );
```
这段程序首先定义了一个 ISO 8601 格式的日期时间串作为输入源;接着采用预设好的模式去解释这个字符串从而构建起相应的 `LocalDateTime` 对象;之后按照前述逻辑完成向高精度时间戳的转变过程[^3]。
阅读全文