所有分类
  • 所有分类
  • 未分类

Java时间(JDK8)-OffsetDateTime的使用

简介

本文介绍JDK8的一个新日期类型:OffsetDateTime。

它表示一个日期-时间,包含时区偏移量。它比LocalDateTime就多了一个时区,其他用法都一样。

用法

与LocalDateTime互转

LocalDateTime -> OffsetDateTime

package com.example.a;

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class Demo {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();

        // 1、-4地方的时间
        System.out.println(OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(-4)));
        // 方式2
        System.out.println(localDateTime.atOffset(ZoneOffset.ofHours(-4)));

        // 2、北京时间对应的-4地方的时间点
        System.out.println(OffsetDateTime.ofInstant(localDateTime.toInstant(ZoneOffset.ofHours(8)), ZoneOffset.ofHours(-4)));
    }
}

结果

2023-09-06T14:20:37.291-04:00
2023-09-06T14:20:37.291-04:00
2023-09-06T02:20:37.291-04:00

OffsetDateTime -> LocalDateTime

package com.example.a;

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class Demo {
    public static void main(String[] args) {
        OffsetDateTime offsetDateTime = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.ofHours(-4));
        System.out.println(offsetDateTime);

        // 转为LocalDateTime 注意:时间还是未变的哦
        System.out.println(offsetDateTime.toLocalDateTime());
    }
}

结果

2023-09-06T14:22:04.324-04:00
2023-09-06T14:22:04.324

格式化

package com.example.a;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Demo {
    public static void main(String[] args) {
        OffsetDateTime now = OffsetDateTime.now();

        // 使用自带的格式
        System.out.println(DateTimeFormatter.ISO_ZONED_DATE_TIME.format(now));
        //或者:
        System.out.println(now.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

        // 自定义格式
        System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX").format(now));
    }
}

结果

2023-09-06T14:08:23.034+08:00
2023-09-06T14:08:23.034+08:00
2023-09-06T14:08:23+08:00

解析

package com.example.a;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Demo {
    public static void main(String[] args) {
        String dateTimeString = "2023-09-06T14:30:45+08:00";

        // 创建自定义的 DateTimeFormatter
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");

        // 解析字符串为 OffsetDateTime
        OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateTimeString, formatter);
    }
}

结果

2023-09-06T14:30:45+08:00
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录