ser*_*0ne 3 java kotlin java-date java-calendar
对于我只能假设是时区问题,以下代码会在同一天生成不同的一年中的值,但是时间不同:
注意,代码是用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)
}
Run Code Online (Sandbox Code Playgroud)
结果
1
2
假设
题
如何修改此选项以忽略时区,以便两个时间都在同一周内发生?
你永远不应该使用遗产java.util.Date
,java.util.Calendar
如果你可以避免它们,这是众多原因之一.
该ZonedDateTime
对象提供了一种获取此方法的方法:
instant.atZone(ZoneId.of("UTC")).get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
Run Code Online (Sandbox Code Playgroud)
编辑:此答案的先前版本使用系统默认时间,以及ChronoUnit.ALIGNED_WEEK_OF_YEAR
.这将1月1日至7日视为一年中的"第1周",无论1月1日哪一天是特定年份.但是,它将基于日期部分ZonedDateTime
.
归档时间: |
|
查看次数: |
65 次 |
最近记录: |