使用 UTC 时区将 startDatetime 转换为本地时间

问题描述 投票:0回答:1

我们有一个用例,其中有 startDateTime、endDateTime 和 timeZoneOffset。

时区偏移:UTC-2:30
如果 timezoneOffset 为负数,这里提到了预期时间。

当前时间 UTC调整后预计时间
开始日期时间:2023-07-25T12:40:46.143Z 2023-07-25T10:10:46.143Z
结束日期时间:12023-07-25T12:54:05.558Z 2023-07-25T10:24:05.558Z

时区偏移:UTC+2:30
如果 timezoneOffset 为正,这里提到了预期时间。

当前时间 UTC调整后预计时间
2023-07-25T12:43:05.558Z 2023-07-25T15:10:05.558Z
2023-07-25T12:54:05.558Z 2023-07-25T15:24:05.558Z

我们正在寻找LocalDateTimeZoneOffSet中的方法。但我们没有找到可以用来获得预期时间的方法。

有人可以建议我们可以在 Java/Kotlin 中使用哪些库来获得预期的结果吗?

我期望在使用 UTC 值调整后以日期时间格式输出。我们想要将日期时间转换为本地时间。

我们有以下代码片段供您参考:

    var timeZoneOffset: String? = null
    timeZoneOffset: "UTC-08:00"
    

    var startDateTime: LocalDateTime? = null
     startDateTime: 2023-07-25T12:40:46.143Z


    var endDateTime: LocalDateTime? = null
    endDateTime: 2023-07-25T12:43:05.558Z
java kotlin date datetime-format java-time
1个回答
0
投票

不太清楚为什么你在

LocalDateTime
中表示 2023-07-25T12:54:05.558Z,因为 Z 表示 UTC+0,所以应该是
ZonedDateTime

根据给定的示例,您正在尝试的是

  1. 给定 UTC+0 的输入,找到给定区域偏移量的等效时间
  2. 将区域更改回 UTC+0 而不更改时间

可以使用以下方法完成:

下面演示如何在 kotlin 中实现这样的调整。

import java.time.ZoneOffset
import java.time.ZonedDateTime

fun main() {
    val timeZoneOffset = "UTC-02:30"

    val zoneOffset = ZoneOffset.of(timeZoneOffset.replace("UTC", ""))

    val startDateTime: ZonedDateTime = ZonedDateTime.parse("2023-07-25T12:40:46.143Z")
    println(adjustZone(startDateTime, zoneOffset))

    val endDateTime: ZonedDateTime = ZonedDateTime.parse("2023-07-25T12:43:05.558Z")
    println(adjustZone(endDateTime, zoneOffset))
}

fun adjustZone(zonedDateTime: ZonedDateTime, zoneOffset: ZoneOffset)
        : ZonedDateTime {
    return zonedDateTime
        .withZoneSameInstant(zoneOffset)
        .withZoneSameLocal(zonedDateTime.zone)
}
© www.soinside.com 2019 - 2024. All rights reserved.