首页 > 解决方案 > 如何解析日期时间并将其与相应的时区相关联

问题描述

我正在尝试读取格式中的字符串2019-12-23 13:35:00以创建 DateTime 对象并将其与我知道它对应的特定时区相关联(GMT-5)

我正在尝试这样做:

 val string1 = "2019-12-23 13:35:00"
    val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    sdf.setTimeZone(StaticDateTimeZone.forID("Etc/GMT-5").toTimeZone)
    val date = sdf.parse(string1)

输出不是我想要的,因为它不是假设日期时间不在 GMT-5 时区,而是在我系统的时区 (GMT+0) 中,因此将日期时间调整为 GMT-5:Mon Dec 23 08:35:00 GMT 2019

如何创建一个不更改输入的日期时间对象,而只是将时区与其相关联?

标签: javascaladatedatetimetimezone

解决方案


看来您正在使用JodaTime,然后转换为java.util.Date. 您可以直接使用java.timeJava 8 中的包:

val string1 = "2019-12-23 13:35:00"
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val date = LocalDateTime.parse(string1, formatter)
date.atZone(ZoneId.of("Etc/GMT-5"))

这使:

date: java.time.LocalDateTime = 2019-12-23T13:35
res0: java.time.ZonedDateTime = 2019-12-23T13:35+05:00[Etc/GMT-5]

LocalDateTime生成一个没有附加任何时区的日期。最后一行有效地ZonedDateTime从前一个日期创建一个新的,并在其上添加给定的时区。如果您需要返回java.util.Date,请参阅此答案


推荐阅读