最近在做海外项目,发现国外的时间处理不像国内这么人性化,我们目前定的一个方案是服务端只存储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。这个等后期整完了再贴出来。