Kotlin 日期格式从一种更改为另一种

Kotlin date format change from one to another

我有一个日期列表,格式为:dd-MM-yyyy

val tripDates = [03-03-2022, 05-03-2002, 23-02-2022]

现在我需要将此列表映射为仅格式不可重复的日期:MM-yyyy

我试过把这个做成地图:

val calendar = Calendar.getInstance()
val myFormat = "MM-yyyy"
val dateFormat = SimpleDateFormat(myFormat, Locale.US)


        val formattedTrips = tripDates.map {
        calendar.time = it
        val month =  calendar.get(Calendar.MONTH+1).toString()
        val year = calendar.get(Calendar.YEAR).toString()
        val monthAndYear = "$month-$year"
        dateFormat.parse(monthAndYear)
    }

但是没用。我无法制作新地图。有什么想法吗?

如果我对你的问题的理解正确,你想读取日期(作为字符串)并将它们输出为另一种格式(作为字符串)。

我们需要两个格式化程序,一个将字符串(以给定的模式)转换为日期,另一个将日期转换回字符串(以不同的模式)。

Java 7

import java.text.SimpleDateFormat

val fullDatePattern = "dd-MM-yyyy"
val monthYearPattern = "MM-yyyy"

val fullDateFormatter = SimpleDateFormat(fullDatePattern)
val monthYearFormatter = SimpleDateFormat(monthYearPattern)

val dates = listOf(
  "03-03-2022",
  "05-03-2002",
  "23-02-2022",
)

dates.map { dateString ->
  monthYearFormatter.format(fullDateFormatter.parse(dateString))
}

我觉得值得一提的是SimpleDateFormat不是thread-safe,所以要小心。

Java 8+

import java.time.LocalDate
import java.time.format.DateTimeFormatter

val fullDatePattern = "dd-MM-yyyy"
val monthYearPattern = "MM-yyyy"

val fullDateFormatter = DateTimeFormatter.ofPattern(fullDatePattern)
val monthYearFormatter = DateTimeFormatter.ofPattern(monthYearPattern)

val dates = listOf(
  "03-03-2022",
  "05-03-2002",
  "23-02-2022",
)

dates.map { dateString ->
  LocalDate
    .parse(dateString, fullDateFormatter)
    .format(monthYearFormatter)
}

以上两个示例的输出:[03-2022, 03-2002, 02-2022]

如果你想删除重复的日期,你可以使用函数distinct