UTC0时间和太平洋时间转换

1. 关系:
  • UTC0时间长这样:2022-02-04T02:33:15.000Z
  • UTC0时间 = 太平洋时间(PST) + 8h
  • 题外: 北京时间 = UTC0 时间 + 8 h = 太平洋时间 + 8h + 8h = PST + 16h
2. 转换:
 2.1. Mysql中转换:

 【场景】:数据库中存储了UTC0时间,接口要求返回太平洋时间
 【栗子】:status_time存储为UTC0时间 : 2022-02-09T22:31:59.000Z
 【转换】:DATE_FORMAT(date_sub(orl.status_time, interval 8 hour), ‘%Y-%m-%d %T’) status_time,
 【结果】:2022-02-09 14:31:59

 2.2. Java代码中转换:

 【结果】:2022-02-09 14:31:59

    public static void main(String[] args) {
        LocalDateTime time = zeroString2DesTimeZone("2022-02-09T22:31:59.001Z", "America/Los_Angeles");
        System.out.println(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

    }

    public static LocalDateTime zeroString2DesTimeZone(String time, String desTimezone) {
        if (time == null) {
            return null;
        }
        LocalDateTime localDateTime = parse(time, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        return localDateTime.atZone(ZoneOffset.UTC).withZoneSameInstant(ZoneId.of(desTimezone)).toLocalDateTime();
    }

    public static LocalDateTime parse(String time, String pattern) {
        if (StringUtils.isAnyBlank(time, pattern)) {
            return null;
        }

        LocalDateTime localDateTime;
        try {
            localDateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(pattern));
        } catch (Exception ex) {
            LocalDate localDate = parseLocalDate(time, pattern);
            localDateTime = Objects.isNull(localDate) ? null : localDate.atStartOfDay();
        }
        return localDateTime;
    }

    private static LocalDate parseLocalDate(String str, String pattern) {
        if (StringUtils.isAnyBlank(str, pattern)) {
            return null;
        }

        LocalDate localDate = null;
        try {
            localDate = LocalDate.parse(str, DateTimeFormatter.ofPattern(pattern));
        } catch (Exception ex) {
        }
        return localDate;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值