java获取时间和本地时间差8小时
我运行获取时间的程序时,发现获取到的时间与实际时间相差8小时
出现这种情况的原因:本地时间时区与jvm的默认时区不一致
解决方案一:
- 设置服务器时区为Asia/Shanghai
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 配置环境变量
TZ=Asia/Shanghai
export TZ
3.通过source命令加载环境变量配置
source /usr/profile.d/java_env.sh
解决方案二:
在代码里加入如下代码即可
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
示例代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.time.ZoneId;
import java.util.Set;
public class SimpleDateFormatTest{
public static void main(String[] args){
// TimeZone t = new TimeZone();
Set<String> zoneArr = ZoneId.getAvailableZoneIds(); //获取可用的时区
for(String zone:zoneArr){
if(zone.equals("Asia/Shanghai")){
System.out.println(zone);
}
}
System.out.println("获取系统默认时区:"+TimeZone.getDefault());
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
System.out.println("代码设置后获取系统默认时区:"+TimeZone.getDefault());
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long timeStamp = new Date().getTime();
System.out.println(timeStamp);
Date t1 = new Date(Long.parseLong(String.valueOf("1678170821117")));
// Date t1 = new Date(1678169949);
String date = s.format(timeStamp);
System.out.println(date);
}
}