JVM参数设置了时区,此时想将Date转成北京时间代码如下
/**
* 获取北京时间
* (-Duser.timezone=America/Anchorage 测试时JVM添加此参数可以调整不同时区)
* @param date 任意时区时间
* @return 北京时间
*/
public static Date castBjDate(Date date) {
Instant instant = date.toInstant();
// 获取UTC时间
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
// 转换北京时间
Date bjDate = Date.from(dateTime.atZone(ZoneId.systemDefault()).plusHours(8).toInstant());
return bjDate;
}
Instant 是没有时区概念的,他是个时间戳
LocalDateTime、Date 有时区概念。
== 不过像这种公司业务涉及全球业务,建议服务器 统一UTC时间,前台做时区转换。==