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。
我有一个日期列表,格式为: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。