java—两个日期之间的时间偏移

lxkprmvk  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(321)

我有两个时间戳和一个本地化日期,用于查找时区偏移量并将其添加到这些日期中。如何计算日期之间的时间偏移?我的方法不适用于负值( if (tsOffset.toSecondOfDay() > 0 总是 true ).

fun parseDateTime(startTs: Long, endTs: Long, localizedDateTime: String): Pair<String, String> {
    val dateUtcStart = LocalDateTime.ofInstant(Instant.ofEpochMilli(startTs), ZoneOffset.UTC)
    val dateUtcEnd = LocalDateTime.ofInstant(Instant.ofEpochMilli(endTs), ZoneOffset.UTC)

    val formatter = DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .parseDefaulting(ChronoField.YEAR_OF_ERA, dateUtcStart.year.toLong())
        .append(DateTimeFormatter.ofPattern("E dd MMM hh:mm a"))
        .toFormatter(Locale.ENGLISH)

    val localDateTime = LocalDateTime.parse(localizedDateTime, formatter)

    val localTs = Timestamp.valueOf(localDateTime).time
    val tsOffset = LocalTime.ofInstant(Instant.ofEpochMilli(localTs - startTs), ZoneOffset.systemDefault())
    val tzString = if (tsOffset.toSecondOfDay() > 0) "+$tsOffset" else tsOffset.toString()

    val startDate = dateUtcStart.toString() + tzString
    val endDate = dateUtcEnd.toString() + tzString

    return Pair(startDate, endDate)
}

@Test
fun parseDateTime() {
    val pair1 = parseDateTime(1626998400000, 1627005600000, "Fri 23 Jul 10:30 am")
    val pair2 = parseDateTime(1626998400000, 1627005600000, "Thu 22 Jul 11:30 pm")

    // pass
    assertEquals("2021-07-23T00:00+10:30", pair1.first)
    assertEquals("2021-07-23T02:00+10:30", pair1.second)
    // fails
    assertEquals("2021-07-23T00:00-00:30", pair2.first)
    assertEquals("2021-07-23T02:00-00:30", pair2.second)
}

我也试过了

val dur = Duration.between(dateUtcStart, localDateTime)

但不确定如何在字符串中转换它或正确地添加日期。
在这里 startTs -事件时间戳的开始。 endTs -此事件的结束时间戳。 localizedDateTime 用于以实际时区(真实城市)显示开始时间,而时间戳以utc显示时间。我需要从中提取这个时区 localizedDateTime 并将其添加到开始和结束字符串日期时间( start = "2021-07-23T00:00+10:30", end = "2021-07-23T02:00+10:30" 对于 startTs = 1626998400000endTs = 1627005600000 因此)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题