【问题标题】:Parse microseconds datetime format in android kotlin在android kotlin中解析微秒日期时间格式
【发布时间】:2022-02-15 04:36:36
【问题描述】:

我想解析以下字符串:

2022-02-14T04:40:33.000000Z

所以我可以将其转换为这种日期格式:

14/Feb/2022 04:40dd/MMM/yyyy HH:mm

但它会引发异常:

Caused by: java.text.ParseException: Unparseable date: "2022-02-14T04:40:33.000000Z"

我的代码是一个基本的SimpleDateFormat,代码如下:

val datetime = "2022-02-14T04:40:33.000000Z"

val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.getDefault())
val outputFormat = SimpleDateFormat("dd/MMM/yyyy HH:mm", Locale.getDefault())

val inputDate = inputFormat.parse(date) // exception thrown here.
val dateString = outputFormat.format(inputDate)

我尝试过以下格式:

  • yyyy-MM-dd'T'HH:mm:ss.SSSZ
  • yyyy-MM-dd'T'HH:mm:ss.SSS'000'Z(我原以为会忽略多余的 000)

我读过 PHP DateTime::format,它的 u 格式字符持续 微秒

但是,android SimpleDateFormat 不支持 微秒 字符。

【问题讨论】:

  • 如果您尝试yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ 会怎样?
  • 使用这个库来满足你的需要github.com/JakeWharton/ThreeTenABP
  • @IvoBeckers 我试过了,还是无法解析。

标签: android kotlin datetime


【解决方案1】:

请使用以下格式

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

【讨论】:

  • 哇,我没想到问题在于“Z”而不是毫秒/微秒格式。非常感谢!
  • 我看到不建议忽略“Z”,here;但对于 android 26+,我们可以使用 java.time.Instant.parse() 代替。我使用“Z”格式,因为返回的格式总是包含“Z”,所以我需要 setTimeZone() 到 UTC。
猜你喜欢
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 2015-01-01
相关资源
最近更新 更多