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

jas*_*onR 4 time android iso date

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

2022 -> for year
3 -> for month
20 -> for day
16 -> hour
58 -> minute
Run Code Online (Sandbox Code Playgroud)

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

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

Nit*_*ish 7

切勿使用CalendarSimpleDateFormatTimeZone或其他旧版日期时间类。

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)
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

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

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


Luc*_*ini 5

尝试使用以下代码:

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)
Run Code Online (Sandbox Code Playgroud)