我有两个时间戳和一个本地化日期,用于查找时区偏移量并将其添加到这些日期中。如何计算日期之间的时间偏移?我的方法不适用于负值( 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 = 1626998400000
及 endTs = 1627005600000
因此)。
暂无答案!
目前还没有任何答案,快来回答吧!