前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当前时区时间 转换为 目标时区时间

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

原创
作者头像
张紫娃
修改2024-04-21 21:58:31
2400
修改2024-04-21 21:58:31
举报

方法1

代码语言:javascript
复制
/**
 * 当前时区时间 → 目标时区时间
 */
public static Date dateFromCurrentToTargetZone(Date date, ZoneId targetZoneId) {
    // 获取对应时区的ZonedDateTime
    ZonedDateTime zonedDateTime = date.toInstant().atZone(targetZoneId);
    // 这一步就是式转换: ZonedDateTime → Date
    return Date.from(zonedDateTime.toLocalDateTime().toInstant(ZonedDateTime.now().getOffset()));
}

方法2

代码语言:javascript
复制
/**
 * 当前时区时间 → 目标时区时间
 */
public static Date dateFromCurrentToTargetZone2(Date date, ZoneId targetZoneId) {
    LocalDateTime localDateTime = date.toInstant().atZone(targetZoneId).toLocalDateTime();
    return new Date(Timestamp.valueOf(localDateTime).getTime());
}

UT测试验证

代码语言:javascript
复制
@Test
public void convertDateFromCurrentToTargetTimeZone_8() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromCurrentToTargetZone(date, ZoneId.of("+08:00"));
    Date targetDate2 = MyDateUtil.dateFromCurrentToTargetZone2(date, ZoneId.of("+08:00"));
    Date expected = DateUtils.parseDate("2019-7-07 20:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}
@Test
public void convertDateFromCurrentToTargetTimeZone_9() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromCurrentToTargetZone(date, ZoneId.of("+09:00"));
    Date targetDate2 = MyDateUtil.dateFromCurrentToTargetZone2(date, ZoneId.of("+09:00"));
    Date expected = DateUtils.parseDate("2019-7-07 21:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}
@Test
public void convertDateFromCurrentToTargetTimeZone_0() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromCurrentToTargetZone(date, ZoneId.of("+00:00"));
    Date targetDate2 = MyDateUtil.dateFromCurrentToTargetZone2(date, ZoneId.of("+00:00"));
    Date expected = DateUtils.parseDate("2019-7-07 12:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}
@Test
public void convertDateFromCurrentToTargetTimeZone_0_1() throws ParseException {
    Date date = new Date(1562501898000L); // Sun Jul 07 20:18:18 CST 2019
    Date targetDate = MyDateUtil.dateFromCurrentToTargetZone(date, ZoneId.of("-01:00"));
    Date targetDate2 = MyDateUtil.dateFromCurrentToTargetZone2(date, ZoneId.of("-01:00"));
    Date expected = DateUtils.parseDate("2019-7-07 11:18:18", "yyyy-MM-dd HH:mm:ss");
    Assert.assertEquals(expected, targetDate);
    Assert.assertEquals(expected, targetDate2);
}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法1
  • 方法2
  • UT测试验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档