ThreeTen-Backport error on Android - ZoneRulesException: No time-zone data files registered

前端 未结 3 1225
太阳男子
太阳男子 2020-12-03 04:04

I\'m using ThreeTen-Backport library for my Android project (because java.time is not yet implemented in android development).

When I write LocalDate today=L

3条回答
  •  执念已碎
    2020-12-03 04:45

    Instead of initialization of the library, you can try this:

    LocalDateEx.kt

    object LocalDateEx {
        /**an alternative of LocalDate.now(), as it requires initialization using AndroidThreeTen.init(context), which takes a bit time (loads a file)*/
        @JvmStatic
        fun getNow(): LocalDate = Calendar.getInstance().toLocalDate()
    }
    
    fun Calendar.toLocalDate(): LocalDate = LocalDate.of(get(Calendar.YEAR), get(Calendar.MONTH) + 1, get(Calendar.DAY_OF_MONTH))
    

    LocalTimeEx.kt

    object LocalTimeEx {
        /**an alternative of LocalDateTime.now(), as it requires initialization using AndroidThreeTen.init(context), which takes a bit time (loads a file)*/
        @JvmStatic
        fun getNow(): LocalTime = Calendar.getInstance().toLocalTime()
    }
    
    fun Calendar.toLocalTime(): LocalTime = LocalTime.of(get(Calendar.HOUR_OF_DAY), get(Calendar.MINUTE), get(Calendar.SECOND), get(Calendar.MILLISECOND) * 1000000)
    

    LocalDateTimeEx.kt

    object LocalDateTimeEx {
        /**an alternative of LocalDateTime.now(), as it requires initialization using AndroidThreeTen.init(context), which takes a bit time (loads a file)*/
        @JvmStatic
        fun getNow(): LocalDateTime = Calendar.getInstance().toLocalDateTime()
    }
    
    private fun Calendar.toLocalDateTime(): LocalDateTime = LocalDateTime.of(get(Calendar.YEAR), get(Calendar.MONTH) + 1, get(Calendar.DAY_OF_MONTH), get(Calendar.HOUR_OF_DAY), get(Calendar.MINUTE), get(Calendar.SECOND),
            get(Calendar.MILLISECOND) * 1000000)
    

    Usage:

       val today=LocalDateEx.getNow()
       val today2=LocalTimeEx.getNow()
       val today3=LocalDateTimeEx.getNow()
    

提交回复
热议问题