gpt4 book ai didi

android - 将任何字符串转换为时区日期并在 kotlin android 中显示

转载 作者:行者123 更新时间:2023-12-02 13:25:52 24 4
gpt4 key购买 nike

我正在从 API 服务获取不同格式的日期 (String)。日期 String 可能类似于 "2010-10-15T09:27:37Z""July 30, 2020" 或任何其他格式。

现在我需要将该 String 转换为设备时区,并且根据时区国家/地区,日期和时间应相应地显示在 UI 上。

我尝试了以下:

    val today = LocalDate.now()
println("localdate today " + today)

val formattedToday = today.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL))
println("formatted today" + formattedToday)

但是谁能告诉我如何将来自 API 的 String 转换为 android kotlin 中的设备时区格式?

请帮我解决这个问题。

提前致谢。

最佳答案

The date String maybe like "2010-10-15T09:27:37Z" or "July 30, 2020" or any other format.

...会导致很多工作。您将不得不处理多种可能的格式。您收到的输入可能是日期加时间加时区/偏移量(第一个示例)或仅日期(第二个示例,由于月份名称,即使是语言环境也很重要)。

对于您的第一个示例 ("2010-10-15T09:27:37Z"),LocalDateTime 不是一个好的选择,因为它会忽略时区或偏移量(Z 在这种情况下为 UTC 或 +00:00 小时的偏移量)。

对于您的第二个示例(“2020 年 7 月 30 日”),LocalDate 足以解析 String,但您将必须添加时间和时区/偏移量才能正确显示和转换它。

使用 ZonedDateTimeOffsetDateTime 以及 ZoneId.systemDefault() 获取设备的区域。

这是一个 ZonedDateTime 的示例,其中包括从当前时区转换为另一个时区的可能性(此处为 "Europe/Amsterdam",但您显然必须使用ZoneId.systemDefault() 然后:

fun main() {
val first = "2010-10-15T09:27:37Z"
val second = "July 30, 2020"
// parse the first example directly to a ZonedDateTime, the String has a default format
val firstZdt = ZonedDateTime.parse(first)
// parse the second String using a matching formatter
val secondDate = LocalDate.parse(second,
DateTimeFormatter.ofPattern("MMMM dd, uuuu", Locale.ENGLISH))
// then add a time of day (start of day here) and the device time zone
val secondZdt = ZonedDateTime.of(secondDate,
LocalTime.MIN,
ZoneId.systemDefault())

// convert a given datetime with a zone to another zone
val europeAmsterdamFirstZdt = firstZdt.withZoneSameInstant(ZoneId.of("Europe/Amsterdam"))
val europeAmsterdamSecondZdt = secondZdt.withZoneSameInstant(ZoneId.of("Europe/Amsterdam"))
// then print them all
println("$firstZdt\tis $europeAmsterdamFirstZdt\tin Amsterdam")
println("$secondZdt\tis $europeAmsterdamSecondZdt\tin Amsterdam")
}

此示例代码的输出:

2010-10-15T09:27:37Z    is 2010-10-15T11:27:37+02:00[Europe/Amsterdam]  in Amsterdam
2020-07-30T00:00Z[UTC] is 2020-07-30T02:00+02:00[Europe/Amsterdam] in Amsterdam

关于android - 将任何字符串转换为时区日期并在 kotlin android 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63989689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com