jvm中指定时区信息user.timezone问题及解决方式

 更新时间:2023年02月20日 09:05:31   作者:russle  
同一份程序使用时间LocalDateTime类型,在国内和国外部署后,返回的时间信息前端使用出问题,这篇文章主要介绍了jvm中指定时区信息user.timezone问题及解决方法,需要的朋友可以参考下

问题

同一份程序使用时间LocalDateTime类型,在国内和国外部署后,返回的时间信息前端使用出问题。 因为LocalDateTime不带时区信息,国内调用后,前端页面默认使用的浏览器所在os的时区(我们的系统中没有给用户设置时区), 因此会出现时间不一致, 或者判断超时了,但是实际上没有超时的问题。

解决方式:

要么返回timestamp数字类型,前端自己解析。 缺点:直接使用api的同事不方便看操作时间信息。

用户可以可以在个的profile中设置时区,方便各个时区用户在一个系统中操作。 缺点:改动较多。

最后的折中方法:
后端内部使用ZonedDateTime,返回的时间中带上时区信息。 备注:这里应用系统没有使用数据库,因为没有使用数据库时间格式。

这里🈶遇到一个问题,国内机器都是时区为

在这里插入图片描述

springboot 程序启动后,ZoneDateTime 格式默认是"2023-02-16T21:44:31.914407+08:00";

在这里插入图片描述

但是国外的机器不行,依然不带时区信息。

在jvm启动参数中指定时区信息
国内启动不指定时间,os默认的是"Asia/Shanghai"。 国外的启动参数指定为-Duser.timezone=CET

示意:(这里是示意,省略其他参数,实际参数要跟多)
Java -jar -Dspring.profiles.active=dev -Duser.timezone=CET app.jar

具体代码

1,ObjectMapper中设置时区和时间格式

    ObjectMapper mapper = new ObjectMapper();
    mapper.findAndRegisterModules();

    mapper.setTimeZone(TimeZone.getDefault()); // 在本项目必须有这样,某则有些接口中返回的ZonedDateTime序列化后不带时区信息,添加这行就会带上时区信息
    mapper.registerModule(new JodaModule());
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    return mapper;

2, 其他区地方解析返回的时间
引入依赖包

	<dependency>
		<groupId>joda-time</groupId>
		<artifactId>joda-time</artifactId>
		<version>2.12.2</version>
	</dependency>
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

   DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ").withZoneUTC();

    //  String str = "2022-02-16T21:44:31.914407+08:00";
    String str = "2022-02-17T14:35:48.8932+08:00";

    //String str = "2022-02-16T21:44:31+09:00";
    DateTime dateTime = formatter.parseDateTime(str);
    log.info("dateTime:{}", dateTime);
    String strAgain = dateTime.toString(formatter);
    log.info("strAgain:{}", strAgain);

到此这篇关于jvm中指定时区信息user.timezone的文章就介绍到这了,更多相关jvm时区信息user.timezone内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单讲解Java的Socket网络编程的多播与广播实现

    简单讲解Java的Socket网络编程的多播与广播实现

    这篇文章主要介绍了Java的Socket网络编程的多播与广播实现,包括网络编程发送和接受数据的一些基础知识整理,需要的朋友可以参考下
    2016-01-01
  • java可变参数(不定向参数)的作用与实例

    java可变参数(不定向参数)的作用与实例

    这篇文章主要给大家介绍了关于java可变参数(不定向参数)的作用与实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java获取XML节点总结之读取XML文档节点的方法

    Java获取XML节点总结之读取XML文档节点的方法

    下面小编就为大家带来一篇Java获取XML节点总结之读取XML文档节点的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java实现线程安全单例模式的五种方式的示例代码

    Java实现线程安全单例模式的五种方式的示例代码

    这篇文章主要介绍了Java中实现线程安全单例模式的五种方式:饿汉式、枚举单例、懒汉式、DCL懒汉式和静态内部类懒汉单例,感兴趣的可以了解一下
    2022-03-03
  • Java AbstractMethodError案例分析详解

    Java AbstractMethodError案例分析详解

    这篇文章主要介绍了Java AbstractMethodError案例分析详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • java中实体类转Json的2种方法

    java中实体类转Json的2种方法

    本篇文章中主要介绍了java中实体类转Json的2种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2017-01-01
  • Springboot整合quartz实现多个定时任务实例

    Springboot整合quartz实现多个定时任务实例

    这篇文章主要介绍了Springboot整合quartz实现多个定时任务代码实例,Quartz 是一款功能强大的开源任务调度框架,几乎可以集成到任何 Java 应用程序中,Quartz 可用于创建简单或复杂的任务调度,用以执行数以万计的任务,需要的朋友可以参考下
    2023-08-08
  • 详谈java线程与线程、进程与进程间通信

    详谈java线程与线程、进程与进程间通信

    下面小编就为大家带来一篇详谈java线程与线程、进程与进程间通信。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 详解SpringMVC注解@initbinder解决类型转换问题

    详解SpringMVC注解@initbinder解决类型转换问题

    本篇文章主要介绍了详解SpringMVC注解@initbinder解决类型转换问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java使用selenium爬取b站动态的实现方式

    Java使用selenium爬取b站动态的实现方式

    本文主要介绍了Java使用selenium爬取b站动态的实现方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论