2

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

我有 org.threeten.bp

ZonedDateTime: 2019-07-25T 14:30:57+05:30 [亚洲/加尔各答]

如何通过添加时区时间来打印此内容?即结果应该有 2019-07-25T 20:00:57

4

2 回答 2

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

于 2019-07-25T21:10:03.533 回答
2

以秒的形式获取偏移量ZonedDateTime

ZonedDateTime time = ZonedDateTime.parse("2019-07-25T14:30:57+05:30");
long seconds = time.getOffset().getTotalSeconds();

现在LocalDateTimeZonedDateTime

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

到本地日期时间

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

如果您想以 UTC 格式获取本地日期时间,请使用toInstant()

这将返回一个 Instant,表示时间线上与此日期时间相同的点。该计算结合了本地日期时间和偏移量。

Instant i = time.toInstant();   //2019-07-25T09:00:57Z
于 2019-07-25T16:39:11.197 回答