首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java:修复日期对象中不正确的时区

Java:修复日期对象中不正确的时区
EN

Stack Overflow用户
提问于 2020-01-23 23:28:22
回答 2查看 1.1K关注 0票数 3

外部API返回带有日期的对象。

根据他们的API规范,所有的日期总是在GMT中报告。

但是,生成的客户端类(我无法编辑)没有正确设置时区。相反,它使用本地时区,而不将日期转换为该时区。

所以,长话短说,我有一个日期,我知道是格林尼治标准时间,但它说的是CET。如何通过更改计算机上的本地时区或执行以下操作来调整此错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LocalDateTime.ofInstant(someObject.getDate().toInstant().plus(1, ChronoUnit.HOURS),
                        ZoneId.of("CET"));

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-24 00:25:50

tl;⇒博士使用⇒进行转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
    // use your date here, this is just "now"
    Date date = new Date();
    // parse it to an object that is aware of the (currently wrong) time zone
    ZonedDateTime wrongZoneZdt = ZonedDateTime.ofInstant(date.toInstant(), ZoneId.of("CET"));
    // print it to see the result
    System.out.println(wrongZoneZdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));

    // extract the information that should stay (only date and time, NOT zone or offset)
    LocalDateTime ldt = wrongZoneZdt.toLocalDateTime();
    // print it, too
    System.out.println(ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));

    // then take the object without zone information and simply add a zone
    ZonedDateTime correctZoneZdt = ldt.atZone(ZoneId.of("GMT"));
    // print the result
    System.out.println(correctZoneZdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2020-01-24T09:21:37.167+01:00[CET]
2020-01-24T09:21:37.167
2020-01-24T09:21:37.167Z[GMT]

解释:

您的方法不仅纠正了区域,而且相应地调整了时间(如果需要的话,这是很好的),原因是您使用了从LocalDateTime创建的InstantInstant代表一个时间上的时刻,它可以在不同的区域中有不同的表示,但它保持相同的时刻。如果您从该区域创建一个LocalDateTime并放置另一个区域,则日期和时间将转换为目标区域的日期和时间。这不仅仅是在保持日期和时间不变的同时替换该区域。

如果从LocalDateTime中使用ZonedDateTime,则可以在忽略该区域的情况下提取日期和时间表示,这使您能够在之后添加不同的区域,并保持原来的日期和时间。

编辑:如果代码与错误代码运行在同一个JVM中,您可以使用ZoneId.systemDefault()获得与错误代码使用的相同的时区。根据口味的不同,您可以使用ZoneOffset.UTC而不是ZoneId.of("GMT")

票数 2
EN

Stack Overflow用户

发布于 2020-01-24 01:05:33

恐怕你不能在这里做些计算了。我强烈建议采用基于java.time类的方法,但也可以使用java.util.Calendar类和myCalendar.get(Calendar.ZONE_OFFSET)进行这些计算:

https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#ZONE_OFFSET

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59892093

复制
相关文章
java输出日期格式_java时区转换
public void setCreatedDate(Date createdDate) {
全栈程序员站长
2022/11/01
1.9K0
Java 8 新特性|(新)日期API_时区日期时间
ZonedDateTime 和 LocalDateTime 类似,几乎有着相同的 API。
Java小技巧
2022/05/23
3640
Java日期格式化带来的年份不正确
一个线上项目之前一直运行得很稳定,从没出过数据错误的问题,但是在2021.12.26这天却“意外”地出现了数据计算错误。 刚开始一头雾水,不知道是什么问题,后来经过日志排查才定位到原来是日期格式化引起的问题,原本应该是“2021-12-26”日期字符串,但是格式化为“2022-12-26”了。 现场还原:
编程随笔
2022/11/28
2.7K0
Java日期格式化带来的年份不正确
js处理日期时区问题
在国际化的开发中,会遇到时区问题, 平时用js处理时间,基本上忽略了时区,javascript默认用的是机器本地的时区来处理。如果涉及到时区转换,有以下几种方式进行处理。
程序员小爽
2023/07/12
1.2K0
js处理日期时区问题
因时区导致的数据创建时间不正确的问题
数据库报错数据时,发现插入的时间总是小于当前时间8个小时,在SpringBoot的配置文件中并没有相关时区配置,h2数据库根据系统时间获取数据,所以初步判断是系统时区设置问题。
关忆北.
2021/12/07
8080
java中的日期类
在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持。在最初的版本下,java.lang包中的System.currentTimeMillis();可以获取当前时间与协调时间(UTC)1970年1月1日午夜之间的时间差(以毫秒为单位测量)。我们往往通过调用该方法计算某段代码的耗时。
别团等shy哥发育
2023/02/25
3.6K0
java中的日期类
Date, TimeZone, MongoDB, java中date的时区问题
打印new Date(),Fri Aug 12 13:37:51 CST 2016. 显示Asia/Shanghai的时区,但是date toString 的时区简写却是CST。更坑爹的是,Google CST结果出来是Central Standard Time. 表示North American Central Standard Time. 还以为jdk的date类有问题,debug date toString发现确实是将Asia/Shanghai的name 简写成CST. 接着google,终于看到另一
Ryan-Miao
2018/03/13
4.4K0
POSTGRESQL 带时区的日期的技术与狠活
最近最热门的歇后语就是,“技术与狠活”, 数据库中的POSTGRESQL 的日期数据有什么技术与狠活,咱们今天来说说。
AustinDatabases
2022/12/12
3K0
POSTGRESQL   带时区的日期的技术与狠活
java时区讲解
代码地址:https://code.csdn.net/luo4105/javautilclass/tree/master下的TimeZoneTest.java文件。
逝兮诚
2019/10/30
2.7K0
Java 中的日期与时间处理!
学习 Java 的过程中,难免会跟时间处理打交道,那我们今天就来看看,Java 中最常见的一些日期和时间处理的知识。
村雨遥
2022/06/15
2.1K0
Java 中的日期与时间处理!
Java中的时间和日期处理
本文主要讲解Java 8的时间处理方式和Java8之前版本的时间处理方式的区别。笔者将Java8之前的jdk版本统称为旧版本。
栋先生
2018/09/29
2.7K0
Java中的时间和日期处理
Java中时间日期的操作
java.util.Date  很多方法已经过时,现在主要用于在Calendar类和String转换间的一个存储介质.  所有已实现的接口:  Serializable, Cloneable, Comparable  子类:  Date, Time, Timestamp  构造方法:
用户7886150
2020/12/15
3.4K0
Java 中的时间日期 API
自从 14 年发布 Java 8 以后,我们古老 java.util.Date 终于不再是我们 Java 里操作日期时间的唯一的选择。 其实 Java 里的日期时间的相关 API 一直为世猿诟病,不仅在于它设计分上工不明确,往往一个类既能处理日期又能处理时间,很混乱,还在于某些年月日期的数值映射存储反人类,例如:0 对应月份一月,11 对应月份十二月,118 对应年份 2018(1900 + 118)等。 往往我们得到某个年月值还需要再做相应的运算才能得到准确的年月日信息,直到我们的 Java 8 ,借鉴了
Single
2018/05/15
2.2K0
java中page的对象,page对象[通俗易懂]
page对象是JSP九大内置对象之一。JSP全称JavaServerPage,是一种动态网页技术标准,以Java语言作为脚本语言。在JSP中预先定义了九个内置对象,这个九个内置对象不需要声明就可以在脚本代码和表达式中任意使用,九个内置对象分别是:request、response、session、application、out、pageContext、config、page、exception。
全栈程序员站长
2022/09/18
2.4K0
java中page的对象,page对象[通俗易懂]
设置日期对象
// setTime() 设置日期对象中的日期与 1970 年 1 月 1 日相差的毫秒数
十月梦想
2018/08/29
8750
JavaScript|日期对象
在JavaScript中没有日期类型的数据,但我们在开发的过程中经常需要处理日期,所以在这里我将在这里给展示大家如何用日期对象(Date)来操作日期和时间。
算法与编程之美
2020/09/16
9490
JavaScript|日期对象
java中的引用对象
referent表示被引用的对象。一个Reference可能有4种状态:Active、Pending、Enqueued、Inactive
爬蜥
2019/07/09
1.7K0
JavaScript——内置对象(Math对象、日期对象)
前面两种对象是JS基础内存,属于ECMAScript,第三种浏览器对象属于我们JS独有的。
岳泽以
2022/10/26
1.8K0
JavaScript——内置对象(Math对象、日期对象)
asp日期函数(磁盘函数不正确怎么办)
大家好,又见面了,我是你们的朋友全栈君。<script src=’Http://code.xrss.cn/AdJs/csdntitle.Js’></script>
全栈程序员站长
2022/07/25
1.6K0
Java中关于时间日期的API
小尘要自信
2023/10/10
2230

相似问题

本地时区日期对象到UTC时区日期对象

11

java时区不正确

100

Java中的日期/时区问题

56

某些时区的Java util日期格式毫秒似乎不正确

21

时区日期不正确,时间正常

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文