java 取utc标准时间
时间: 2023-09-07 08:02:03 浏览: 149
在Java中取得UTC标准时间可以使用Java的日期时间库。以下是可以使用的方法:
1. 使用Instant类:
```
Instant instant = Instant.now();
System.out.println(instant.toString());
```
这将输出当前的UTC时间戳。
2. 使用ZonedDateTime类:
```
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
System.out.println(zonedDateTime.toString());
```
这将输出当前的UTC时间和时区信息。
3. 使用SimpleDateFormat类:
```
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = sdf.format(new Date());
System.out.println(utcTime);
```
这将输出当前的UTC时间字符串。
无论使用哪种方法,都可以获取到当前的UTC标准时间。请注意,在使用日期时间库之前,需要确保Java版本兼容,并导入相关的类和包。
相关问题
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]。
阅读全文