首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >目标时区时间 转换为 当前时区时间

目标时区时间 转换为 当前时区时间

原创
作者头像
张紫娃
修改于 2024-12-27 06:56:10
修改于 2024-12-27 06:56:10
4830
举报

方法1

代码语言:java
AI代码解释
复制
/**
 * 目标时区时间 → 当前时区时间
 */
public static Date dateFromTargetToCurrentZone(Date date, ZoneId targetZoneId) {
    // 这一步: Date → ZonedDateTime
    ZonedDateTime targetZonedDateTime = date.toInstant().atZone(ZonedDateTime.now().getZone());
    
    // 目标时区ZonedDateTime → 当前时区ZonedDateTime
    ZonedDateTime currentZonedDateTime = ZonedDateTime.ofInstant(targetZonedDateTime.toLocalDateTime().toInstant((ZoneOffset) targetZoneId), ZoneId.systemDefault());
    
    // 这一步就是式转换: ZonedDateTime → Date
    return Date.from(currentZonedDateTime.toLocalDateTime().toInstant(ZonedDateTime.now().getOffset()));
}

方法2

代码语言:java
AI代码解释
复制
/**
 * 目标时区时间 → 当前时区时间
 */
public static Date dateFromTargetToCurrentZone2(Date date, ZoneId targetZoneId) {
    // 为了获取没有时区的时间
    LocalDateTime localDateTime = date.toInstant().atZone(ZonedDateTime.now().getZone()).toLocalDateTime();
    
    // localDateTime视为targetZone的localDateTime → 前时区时间
    return Date.from(localDateTime.toInstant((ZoneOffset) targetZoneId));
}

UT测试验证

代码语言:java
AI代码解释
复制
@Test
public void convertDateFromTargetToCurrentTimeZone_9() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromTargetToCurrentZone(date, ZoneId.of("+09:00"));
    Date targetDate2 = MyDateUtil.dateFromTargetToCurrentZone2(date, ZoneId.of("+09:00"));
    Date expected = DateUtils.parseDate("2019-7-07 19:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}
@Test
public void convertDateFromTargetToCurrentTimeZone_0() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromTargetToCurrentZone(date, ZoneId.of("+00:00"));
    Date targetDate2 = MyDateUtil.dateFromTargetToCurrentZone2(date, ZoneId.of("+00:00"));
    Date expected = DateUtils.parseDate("2019-7-08 04:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}
@Test
public void convertDateFromTargetToCurrentTimeZone_0_1() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromTargetToCurrentZone(date, ZoneId.of("-01:00"));
    Date targetDate2 = MyDateUtil.dateFromTargetToCurrentZone2(date, ZoneId.of("-01:00"));
    Date expected = DateUtils.parseDate("2019-7-08 05:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
把当前时区时间视为某一时区时间 并将其转换为 目标时区时间
张紫娃
2023/07/21
2720
把当前时区时间视为某一时区时间 并将其转换为 目标时区时间
当前时区时间 转换为 目标时区时间
张紫娃
2023/07/21
5410
当前时区时间 转换为 目标时区时间
如何构造一个 Date()
An instantaneous point on the time-line. 中文描述就是Instant表示高精度时间戳
张紫娃
2023/07/19
3690
如何构造一个 Date()
如何构造一个 ZonedDateTime()
张紫娃
2023/07/20
3180
如何构造一个 ZonedDateTime()
获取日期的String格式
张紫娃
2023/07/22
9100
获取日期的String格式
如何构造一个 OffsetDateTime()
张紫娃
2023/07/20
2770
如何构造一个 OffsetDateTime()
Java中各种时间类型相互转换
Java中各种时间类型相互转换 参数声明: final Date date = new Date(); final Timestamp timestamp = new Timestamp(date.getTime()); final Calendar calendar = Calendar.getInstance(); final Instant instant = Instant.now(); final LocalDateTime localDateTime = LocalDa
Java那些事儿
2020/07/21
6.2K0
localdate和localdatetime互转_datetimeformatter.ofpattern
现在LocalDateTime、LocalDate、Date之间的相互转换就完成了
全栈程序员站长
2022/11/10
1.8K0
localdate和localdatetime互转_datetimeformatter.ofpattern
如何构造一个 Instant
An instantaneous point on the time-line. 中文描述就是Instant表示高精度时间戳。
张紫娃
2023/07/20
3510
如何构造一个 Instant
如何构造一个 Timestamp()
java.sql.Timestamp 类是 Java 中用于精确表示日期和时间的数据类型,特别适用于在与数据库交互时处理时间戳信息。
张紫娃
2023/07/20
2900
如何构造一个 Timestamp()
(95) Java 8的日期和时间API / 计算机程序的思维逻辑
本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍。Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API。 我们先从日期和时间的表示开始。 表示
swiftma
2018/01/31
2K0
11.4 Java 日期和时间类
我们先来看一些基本概念,然后再介绍 Java 的日期和时间 API。关于日期和时间,有一些基本概念,包括时区、时刻、纪元时、年历等。
acc8226
2022/05/17
4.5K0
11.4 Java 日期和时间类
JDK8这样处理日期,效率绝对提升,逼格必然翻倍!
开发过程中,经常需要为过生日的用户送上一些祝福,例如,用户的生日为1990-10-12,如果今天是2016-10-12,那么今天就是用户的生日(按公历/身份证日期来算),那么通过java8新的日期库,我们该如何来进行判断?
程序员小明
2019/06/03
3.3K0
Java 编程问题:三、使用日期和时间
本章包括 20 个涉及日期和时间的问题。这些问题通过Date、Calendar、LocalDate、LocalTime、LocalDateTime、ZoneDateTime、OffsetDateTime、OffsetTime、Instant等涵盖了广泛的主题(转换、格式化、加减、定义时段/持续时间、计算等)。到本章结束时,您将在确定日期和时间方面没有问题,同时符合您的应用的需要。本章介绍的基本问题将非常有助于了解日期-时间 API 的整体情况,并将像拼图中需要拼凑起来的部分一样解决涉及日期和时间的复杂挑战。
ApacheCN_飞龙
2022/07/11
5.9K0
如何构造一个 LocalDateTime()
张紫娃
2023/07/20
2480
如何构造一个 LocalDateTime()
Java日期问题汇总
通常格式化日期时,都是使用的YYYY/MM/dd来格式化日期,但是在遇到跨年日期时,就会遇到很神奇的现象,如下:
雨临Lewis
2022/01/12
1.6K0
Java8中时间API
java.time.Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。
鱼找水需要时间
2023/04/28
9790
业务系统-全球化多时区的解决思路
本人前段时间经历了一个全球化的报表项目(java+mysql),刚开始业务只在国内开展,所有报表用户都是中国人,涉及时间/日期的数据,统一用北京时间即可。后来业务逐渐扩大到海外市场,很多国外用户也会使用该系统,这样默认用北京时间来显示就不太友好了。
菩提树下的杨过
2020/04/08
5K1
DateTimeFormatter日期格式化
使用旧的Date对象时,我们用SimpleDateFormat进行格式化显示。使用新的LocalDateTime或ZonedLocalDateTime时,我们要进行格式化显示,就要使用DateTimeFormatter。
六月的雨在Tencent
2024/03/28
2710
Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
本文目前提供:LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
全栈程序员站长
2022/08/12
13.5K0
相关推荐
把当前时区时间视为某一时区时间 并将其转换为 目标时区时间
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档