【发布时间】:2019-05-30 12:47:48
【问题描述】:
对于我只能假设是时区问题,以下代码会在同一天产生不同的年份值,但时间不同:
注意,代码是用 Kotlin 编写的
示例
fun main(args: Array<String>) {
val middaySundayAfterEpoch = Instant.EPOCH + Duration
.ZERO
.plusDays(3)
.plusHours(12)
val almostMidnightSundayAfterEpoch = Instant.EPOCH + Duration
.ZERO
.plusDays(3)
.plusHours(23)
println(getWeekOfYear(middaySundayAfterEpoch))
println(getWeekOfYear(almostMidnightSundayAfterEpoch))
}
fun getWeekOfYear(instant: Instant): Int {
val calendar: Calendar = Calendar.getInstance()
calendar.time = Date.from(instant)
return calendar.get(Calendar.WEEK_OF_YEAR)
}
结果
1
2
假设
- 周日,12:00 实际上是周日,日历中的 13:00
- 星期日,23:00 实际上是星期一,日历中的 00:00
问题
如何修改它以忽略时区,以便两个时间都在同一周发生?
【问题讨论】:
-
永远不要将糟糕的旧日期时间类 (
Calendar&Date) 与现代 java.time 类 (Instant) 混合使用。在 Java 8 及更高版本中采用 JSR 310 后,遗留类被完全取代。仅在与尚未更新到 java.time 的旧代码互操作时转换为/从旧类转换。换句话说,尽可能避免Calendar和Date。
标签: java kotlin date java-calendar