java时区与Date的转换

最近在做海外项目,发现国外的时间处理不像国内这么人性化,我们目前定的一个方案是服务端只存储UTC0时间,根据客户端传的时间、时区,服务端统一处理成UTC0,在转UTC0时遇到了很多问题,不啰嗦了,直接贴code。

public static void main(String[] args) throws ParseException {
        String a = "2021-10-20 09:09:51";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(a);
//        Date d = new Date();
        System.out.println(d);
        System.out.println(getUTC0WithTimeAndZone(d, "UTC+05:00"));
        System.out.println(getUTC0WithTimeAndZone(d, "UTC-05:00"));
    }


    public static Date getUTC0WithTimeAndZone(Date clientTime, String clientTimeZone) {
        ZoneId clientZoneId = ZoneId.of(clientTimeZone);
        java.time.LocalDateTime localDateTime = clientTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        ZonedDateTime dateAndTimeInClient = ZonedDateTime.of(localDateTime, clientZoneId );
        //System.out.println("Current date and time in a particular timezone : " + dateAndTimeInClient);
        ZonedDateTime utcDate = dateAndTimeInClient.withZoneSameInstant(ZoneOffset.UTC);
        //System.out.println("Current date and time in UTC : " + utcDate);
        return Date.from(utcDate.withZoneSameLocal(ZoneId.systemDefault()).toInstant());
    }

服务端统一处理客户端上传的时间目前想到有2种方式,拦截器、AOP。这个等后期整完了再贴出来。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值