问题出现原因
项目部署到linux服务器,通过new Date()获取时间和在windows本地时间不一致,通过排查问题,发现是new Date()的问题
linux系统上通过new Date()获取的时间是世界时间(UTC时间)所以在获取时间时需要对时间进行时区的处理操作
方案一:springboot项目在主启动类中通过注解@PostConstruct解决
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
/**
* 解决通过 new Date()获取时间不一致问题,解决发送审批时间早8八个小时问题
* @PostConstruct 是java的注解,被用来修饰一个非静态非静态的void()方法,
* 是一种JSR-250的规范,当bean创建完成的时候,会后置执行@PostConstruct修
饰的方法
* spring中@PostConstruct 在Bean初始化中的执行顺序
* Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释
的方法)
*/
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
}
方案二:在通过new Date()获取时间后,将时间设置成东八区时间
Date date=new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 设置成东八区时间
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));