带时区的ZonedDateTime已添加到打印格式

时间:2019-07-25 15:41:39

标签: java datetime zoneddatetime threetenbp

我在项目中使用https://github.com/JakeWharton/ThreeTenABP

我有org.threeten.bp

ZonedDateTime:2019年7月25日 14:30:57 + 05:30 [亚洲/ Calcutta]

如何加上时区小时数打印出来?即结果应为2019-07-25T 20:00:57

2 个答案:

答案 0 :(得分:2)

ZonedDateTime

获取以秒为单位的偏移量
ZonedDateTime time = ZonedDateTime.parse("2019-07-25T14:30:57+05:30");
long seconds = time.getOffset().getTotalSeconds();

现在从LocalDateTime获得ZonedDateTime部分

LocalDateTime local = time.toLocalDateTime().plusSeconds(seconds);   //2019-07-25T20:00:57  

toLocalDateTime

  

获取此日期时间的LocalDateTime部分。

如果要获取UTC的本地日期时间,请使用toInstant()

  

这将返回一个瞬时值,表示与该日期时间在时间​​轴上的同一点。该计算结合了本地日期时间和偏移量。

Instant i = time.toInstant();   //2019-07-25T09:00:57Z

答案 1 :(得分:2)

您误会了。字符串中+05:30的偏移量表示与UTC相比,时间已经添加了5小时30分钟。因此,再次添加它们没有任何意义。

如果要补偿偏移量,只需将日期时间转换为UTC。例如:

    ZonedDateTime zdt = ZonedDateTime.parse("2019-07-25T14:30:57+05:30[Asia/Calcutta]");
    OffsetDateTime utcDateTime = zdt.toOffsetDateTime().withOffsetSameInstant(ZoneOffset.UTC);
    System.out.println(utcDateTime);

输出:

  

2019-07-25T09:00:57Z