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”
切勿使用Calendar
、SimpleDateFormat
、TimeZone
或其他旧版日期时间类。
java.time类OffsetDateTime
的使用
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 及以上版本,要在较低版本中使用这些类,您需要启用脱糖 -启用脱糖
尝试使用以下代码:
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)