Datetime 如何将UTC日期时间解析为用户';s locale与现代java.time?
我从API中获得以下字符串,它是UTC格式的,但是其中没有时区定义<代码>yyyy-MM-dd HH:MM:ss 我想将其解析为dateTime并将其转换为用户的语言环境,然后将其显示为Datetime 如何将UTC日期时间解析为用户';s locale与现代java.time?,datetime,kotlin,Datetime,Kotlin,我从API中获得以下字符串,它是UTC格式的,但是其中没有时区定义yyyy-MM-dd HH:MM:ss 我想将其解析为dateTime并将其转换为用户的语言环境,然后将其显示为h:mm a。我想用现代的java.time 所以我想到了这个: val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") val endDateString = "2020-12-21 20:32:
h:mm a
。我想用现代的java.time
所以我想到了这个:
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val endDateString = "2020-12-21 20:32:39"
val odtInstanceAtOffset = OffsetDateTime.parse(endDateString, dateTimeFormatter)
^它在这里坠毁了
java.time.format.DateTimeParseException:文本“2020-12-21 20:32:39”
无法分析:无法从中获取OffsetDateTime
临时助理:{},ISO解析为2020-12-21T20:32:39类型
java.time.format.Parsed
所以不确定这是不是正确的方法。我假设此时,如果我可以将该字符串转换为UTC日期时间实例,我可以继续如下操作:
val localDate: LocalDate = utcDatetime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a")
val displayDate: String = formatter.format(localDate)
正确吗?您需要将区域信息添加到
DateTimeFormatter
中,然后可以使用DateTimeFormatter
解析字符串。其结果是一个TemporalAccessor
对象,然后可以将其格式化为所需的格式。像这样:
val endDateString=“2020-12-21 20:32:39”
val utcDateTimeFormatter=DateTimeFormatter
模式的名称(“yyyy-MM-dd HH:MM:ss”)
.withZone(ZoneOffset.UTC)
val localDateTimeFormatter=DateTimeFormatter
模式的名称(“hh:mm a”)
.withZone(ZoneId.systemDefault())
val displayDate=utcDateTimeFormatter.parse(endDateString){temporal->
localDateTimeFormatter.format(时态)
}
谢谢你指出这一点。我已经更新了这个问题。也许这是一个新问题,但由于这是纯字符串转换,我仍然没有日期对象。如何将日期与当前日期进行比较
if(todayDate.after(endDate){…}
您可以查看我的答案的以前版本。在第一个版本中,我使用Instant
对象初始化了一个变量。您可以在Instant
中找到合适的方法进行比较。
val localDate: LocalDate = utcDatetime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a")
val displayDate: String = formatter.format(localDate)