gpt4 book ai didi

android - 如何使用 kotlin 将服务器时间转换为本地时间?

转载 作者:行者123 更新时间:2023-12-03 08:36:45 24 4
gpt4 key购买 nike

我从服务器获取时间,我想将其更改为本地区域,如何使用 Kotlin 做到这一点?
来自服务器的时间类似于“2020-09-01T13:16:33.114Z”
这是我的代码:

  

val dateStr = order.creationDate
val df = SimpleDateFormat("dd-MM-yyyy HH:mm aa", Locale.getDefault())
df.timeZone = TimeZone.getDefault()
val date = df.parse(dateStr)
val formattedDate = df.format(date)
textViewDateOrderDetail.text = formattedDate

order.creationDate:服务器时间

最佳答案

tl;博士

这将转换示例 String到系统默认时区:

import java.time.ZonedDateTime
import java.time.ZoneId

fun main() {
// example String
val orderCreationDate = "2020-09-01T13:16:33.114Z"
// parse it to a ZonedDateTime and adjust the zone to the system default
val localZonedDateTime = ZonedDateTime.parse(orderCreationDate)
.withZoneSameInstant(ZoneId.systemDefault())
// print the adjusted values
println(localZonedDateTime)
}

输出取决于系统默认时区,在 Kotlin Playground 中,它会生成以下行:

2020-09-01T13:16:33.114Z[UTC]

这显然意味着 Kotlin Playground 正在以 UTC 时间运行。


还有一点...

强烈建议使用java.time现在并停止使用过时的库进行日期时间操作( java.util.Datejava.util.Calendar 以及 java.text.SimpleDateFormat )。

如果你这样做,你可以解析这个例子 String无需指定输入格式,因为它是按照 ISO 标准格式化的。

您可以创建一个偏移感知 ( java.time.OffsetDateTime ) 对象或区域感知对象( java.time.ZonedDateTime ),这取决于你。以下示例显示如何解析您的 String 、如何调整区域或偏移以及如何以不同格式打印:

import java.time.OffsetDateTime
import java.time.ZonedDateTime
import java.time.ZoneId
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter

fun main() {
// example String
val orderCreationDate = "2020-09-01T13:16:33.114Z"
// parse it to an OffsetDateTime (Z == UTC == +00:00 offset)
val offsetDateTime = OffsetDateTime.parse(orderCreationDate)
// or parse it to a ZonedDateTime
val zonedDateTime = ZonedDateTime.parse(orderCreationDate)
// print the default output format
println(offsetDateTime)
println(zonedDateTime)
// adjust both to a different offset or zone
val localZonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("Brazil/DeNoronha"))
val localOffsetDateTime = offsetDateTime.withOffsetSameInstant(ZoneOffset.ofHours(-2))
// print the adjusted values
println(localOffsetDateTime)
println(localZonedDateTime)
// and print your desired output format (which doesn't show a zone or offset)
println(localOffsetDateTime.format(
DateTimeFormatter.ofPattern("dd-MM-uuuu hh:mm a")
)
)
println(localZonedDateTime.format(
DateTimeFormatter.ofPattern("dd-MM-uuuu hh:mm a")
)
)
}

输出为

2020-09-01T13:16:33.114Z
2020-09-01T13:16:33.114Z
2020-09-01T11:16:33.114-02:00
2020-09-01T11:16:33.114-02:00[Brazil/DeNoronha]
01-09-2020 11:16 AM
01-09-2020 11:16 AM

要转换为系统区域或偏移量,请使用 ZoneId.systemDefault()ZoneOffset.systemDefault()而不是硬编码的。关注ZoneOffset因为它不一定给出正确的值,因为只有 ZoneId考虑夏令时。欲了解更多信息,请参阅this question and its answer

有关为解析或格式化输出定义的格式的更多、更准确的信息,您应该阅读 the JavaDocs of DateTimeFormatter .

关于android - 如何使用 kotlin 将服务器时间转换为本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63685800/

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