jvm中指定时区信息user.timezone问题如何解决

发布时间:2023-02-25 13:58:38 作者:iii
来源:亿速云 阅读:129

本篇内容介绍了“jvm中指定时区信息user.timezone问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

问题

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

解决方式:

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

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

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

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

jvm中指定时区信息user.timezone问题如何解决

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

jvm中指定时区信息user.timezone问题如何解决

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

在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问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. JVM运行时数据区如何划分
  2. Springboot添加jvm监控实现数据可视化的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:PyTorch的TensorDataset功能怎么使用

下一篇:python常用时间库time、datetime与时间格式之间如何转换

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》