在 Kotlin 中将日期和时间转换为 Iso 8601

Convert date and time to Iso 8601 in Kotlin

我的应用程序中有一个选择器,我可以 select 年、月、日、小时和分钟。 在更改了每个之后,我得到了一些这样的数字:

2022 -> for year
3 -> for month
20 -> for day
16 -> hour
58 -> minute

如何将这些值转换为 Iso 8601 日期格式?

我需要这样的格式:“2022-03-20T16:58:00.288Z”

尝试使用此代码:

val date = Calendar.getInstance().apply {
    set(Calendar.YEAR, year)
    set(Calendar.MONTH, month)
    set(Calendar.DAY_OF_MONTH, day)
    set(Calendar.HOUR_OF_DAY, hour)
    set(Calendar.MINUTE, minute)
}.time 
val formattedDate = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").format(date)

切勿使用 CalendarSimpleDateFormatTimeZone 或其他旧版 date-time 类.

使用 java.timeOffsetDateTime

val localDate = LocalDateTime.of(2022, 1, 3, 16, 36)
//LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute) 
val offsetDate = OffsetDateTime.of(localDate, ZoneOffset.UTC)

ZoneOffset.UTC - 表示当前时间为 UTC 时区(LocalDate 没有任何时区信息),可以更改为系统默认值(OffsetDateTime.now().offset)或自定义时区偏移量(ZoneOffset.of("+02:00"))

转换为 ISO 格式

val stringDate = offsetDate.format(DateTimeFormatter.ISO_DATE_TIME)
Log.d("stringDate", "Date  $stringDate")

输出: 2022-01-03T11:36:00Z

注意: java.time 类 或 Java8 仅适用于 Android 8 及以上版本,要使用这些 类 对于较低版本,您需要启用脱糖 -