来访~103010 文章~106 评论~25
2023年4月20日 作者 张临志

SimpleDateFormat(“E”)或者SimpleDateFormat(“EEEE”)真的能完美获取到中文的星期几吗?

有一需求,项目中在显示的日期后面需要额外显示一下是周几。这个时候SimpleDateFormat(“E”)就派上用场了,毕竟SimpleDateFormat(“E”)在很多人看来可以完美获取到中国人喜爱的星期几。功能刷刷的完成了,顺利的通过本地测试,测试环境测试,没问题后,部署服务器,然后翻车了。

原因:

经过一番查看,发现使用SimpleDateFormat(“E”)格式化的星期变成英文的了,不再上熟悉的中文。这和事先说好的不一样啊。经过验证,最终得出java虚拟机读取时区不同的原因。

为了验证这个结论,在出现问题的服务器上输出了

System.out.println(“获得时区:” + Locale.getDefault());

输出的结果:获得时区:en_US

出现问题的原因:

出现这种问题的原因有以下几点:

1 启动虚拟机时指定了时区

2 系统的时区不对

2 指定了错误的时区。

解决办法:

解决办法:SimpleDateFormat(“E”, Locale.CHINA);

在构造方法中显示指定时区。