从存储为Kotlin文本的日历时间中减去天数

时间:2019-02-27 11:22:17

标签: kotlin

所以我将科特林的当前日期作为日期:

val calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_YEAR, -daysAgo)

我将其作为文本存储在标签上:time = calendar.time.toString()

接下来,我想从标签文字中减去2天:

            val date = LocalDate.parse(time)    
            val cal = Calendar.getInstance()
            cal.time = java.sql.Date.valueOf(date.toString())
            cal.add(Calendar.DAY_OF_YEAR, -daysAgo)

方法在此行之后抛出“ java.time.format.DateTimeParseException”异常:LocalDate.parse(time)有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我将使用从JDK 8开始可用的新时间API,该API可在java.time中找到。您还应该就所使用的格式达成共识:

val format = DateTimeFormatter.ISO_DATE_TIME
val current = LocalDateTime.now()
val currentAsText = current.format(format)
println(currentAsText) // e.g. 2019-02-27T12:00:00.000

val fromText = LocalDateTime.parse(currentAsText, format)
val twoDaysAgo = fromText.minusDays(2)
println(twoDaysAgo) // 2019-02-27T12:00:00.000

答案 1 :(得分:1)

来自Date类:

  

公共字符串toString()
  将此Date对象转换为以下形式的字符串:
  陶氏周一dd hh:mm:ss zzz yyyy

这将导致以下格式:

Fri Feb 22 11:45:35 EET 2019

您需要ZonedDateTime来解析这种格式,如下所示:

val date = ZonedDateTime 
    .parse(time, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
    .toLocalDate()