查看和修改服务器中java程序默认的服务器时区

1.查看java的默认时区

java -XshowSettings:local

在这里插入图片描述
注意观察上面的 user.timezone = ,这种情况会选择默认的系统时区来自行计算Java生成的时间。

这里再扩展一些知识点:
window系统的时间就是硬件时间。
mac系统和linux系统的系统时间是将硬件时间根据时区转换为时区时间,再根据/etc/localtime转化为最终展示时间。时区的配置是/etc/timezone,显示格式的配置是/etc/localtime

Linux 修改本机时间

旧版本(如CentOS6)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

新版本(如CentOS7)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

原因:
原本的时区文件变成了链接文件,直接使用cp就相当于把原时区文件内容给覆盖掉,而且文件名不变!
例如,原本的 /etc/localtime 是链接到 /usr/share/zoneinfo/America/New_York 的,使用cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime之后原本New_York 的内容就变成了 Shanghai 的内容,文件名不变.
注意:
调整了时间格式,本机所属的时区仍保持不变.

Linux 修改本机时区

在linux中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等计算出当前的时间。
比如jdk应用,时区为“Etc/UTC”,本机时间改为北京时间,通过java代码中new 出来的时间还是utc时间,所以必须得修正本机的时区。

echo 'Asia/Shanghai' >/etc/timezone

2.修改服务器的显示时间

a.先查看服务器当前时间

date

b.如果不是北京时间,做以下操作

1.先查看
ll /etc/localtime
2.建立软连接
ln -s /etc/localtime /usr/share/zoneinfo/Asia/shanghai
3.再次查看是否成功建立软连接
ll /etc/localtime
4.测试
date

3.也可以在运行jar包的时候配置时区
java -jar -Duser.timezone=UTC+08 xxx.jar

参考

可以使用Java的TimeZone类获取客户端时区信息。 在服务器Java,可以通过获取HTTP请求头的"TimeZone"信息来获取客户端时区。具体实现如下: ```java import java.util.TimeZone; public class TimeZoneUtil { public static String getClientTimeZone(HttpServletRequest request) { String timeZone = request.getHeader("TimeZone"); if (timeZone == null || timeZone.isEmpty()) { return "UTC"; } return timeZone; } public static TimeZone getTimeZone(String timeZone) { if (timeZone == null || timeZone.isEmpty()) { return TimeZone.getTimeZone("UTC"); } return TimeZone.getTimeZone(timeZone); } } ``` 在上面的代码,getClientTimeZone方法会获取HTTP请求头的"TimeZone"信息,如果没有该信息则默认返回UTC时区。 getTimeZone方法根据传入的时区信息获取对应的TimeZone对象,如果传入的时区信息为空,则默认返回UTC时区。 使用示例: ```java import java.util.TimeZone; public class Main { public static void main(String[] args) { // 假设客户端时区为东八区 String clientTimeZone = "Asia/Shanghai"; // 获取对应的TimeZone对象 TimeZone timeZone = TimeZoneUtil.getTimeZone(clientTimeZone); System.out.println(timeZone.getID()); // 输出: Asia/Shanghai System.out.println(timeZone.getDisplayName()); // 输出: 国标准时间 System.out.println(timeZone.getRawOffset()); // 输出: 28800000 } } ``` 在上面的示例,我们传入客户端时区为"Asia/Shanghai",使用TimeZoneUtil类获取对应的TimeZone对象,并输出相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值