java new date()时间与ubuntu系统服务器时间相差8小时
项目是需要放置在ubantu系统上,当我首次在ubuntu部署了服务器,发现new Date()打印出来的时间与时区为北京的时间相差了8个小时,而后我马上进入ubuntu系统查看并且修改了系统的时区,设置为了Asia/Shanghai 上海时区,但是在ubuntu打印系统时间时仍然存在相差8小时的时间
设置完成后,重启了java服务器new date()仍然相差8小时…
后续在网上看了一些帖子,就在项目启动时设置了时区,代码如下
/**
* 项目ioc注入完成后运行
* @author ly
*/
@Component
@Order(value = 1)
@Slf4j
public class InitMQStartThread implements ApplicationRunner {
@PostConstruct
void started() {
log.info("修改时区前时间:{}", new Date()); //Tue 2022-05-24 02:54:58 UTC
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai "));
log.info("修改时区后时间:{}", new Date()); //Tue 2022-05-24 10:54:58 CST
}
}
这时打印出来的时间很令人满意,但没想到后续会出现更严重的问题
当我使用代码获取数据库数据(数据库mysql 创建时间字段设置datetime)时,发现创建时间莫名其妙的加了8个小时,而且是每获取一次数据这个创建时间都会自动加8小时,这时我意识到是因为设置了以上代码块设置了时区的问题,系统在获取数据库时间时默认认为是世界时间(世界时间比shanghai时区少8小时)所以系统根据以上代码块直接加了8小时修改为了shanghai时区的时间,之后我便删除了此段代码。
后续终于ubuntu系统内进行修改后,java new date()时间才与ubantu系统时间想匹配
在ubantu运行命令
***@***:~/*****/****/***/****$ echo 'Asia/Shanghai' >/etc/timezone
之后再重启java项目即可