java - Joda 在 GMT 时区解析 ISO8601 日期

标签 java datetime jodatime

我有一个 ISO 8601 日期,比方说:2012-01-19T19:00-05:00

我的机器时区是 GMT+1

我正在尝试使用 joda 来解析它并将其转换为相应的 GMT 日期和时间:

DateTimeFormatter simpleDateISOFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmZZ"); 
creationDate = simpleDateISOFormat.withZone(DateTimeZone.UTC)
                                  .parseDateTime(date + "T" + time)
                                  .toDate(); 

现在我期待的结果是 Fri Jan 20 00:00:00 CET 2012

我得到的是:Fri Jan 20 01:00:00 CET 2012

我相信这是因为我在时区 GMT + 1

有没有办法解析假装在不同时区的日期?

编辑:基本上问题出在我调用 toDate() 方法时。该方法按照我的需要将 DateTime 转换为 Date,但我将其转换为本地时间。

有人知道没有这种限制的转换方法吗?

最佳答案

这是一个正常工作的测试用例。显示如何显示其他时区的时间。

import org.joda.time.*
import org.joda.time.format.*

@Grapes([
    @Grab(group='joda-time', module='joda-time', version='1.6.2')
])

class JodaTimeTest extends GroovyTestCase {

    void testTimeZone() {
        DateTimeFormatter parser    = ISODateTimeFormat.dateTimeParser()
        DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis()

        DateTime dateTimeHere     = parser.parseDateTime("2012-01-19T19:00:00-05:00")

        DateTime dateTimeInLondon = dateTimeHere.withZone(DateTimeZone.forID("Europe/London"))
        DateTime dateTimeInParis  = dateTimeHere.withZone(DateTimeZone.forID("Europe/Paris"))

        assertEquals("2012-01-20T00:00:00Z", formatter.print(dateTimeHere))
        assertEquals("2012-01-20T00:00:00Z", formatter.print(dateTimeInLondon))
        assertEquals("2012-01-20T01:00:00+01:00", formatter.print(dateTimeInParis))
    }
}

注意:

  • 你必须调整断言,因为我位于伦敦时区:-)
  • “withZone”方法更改 DateTime 对象的元数据以指示其时区。仍然是相同的时间点,只是以不同的偏移量显示。

关于java - Joda 在 GMT 时区解析 ISO8601 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077226/

相关文章:

java - 有没有办法在调用泛型/参数化方法时强制提供类型参数?

java - BarChart Item Click 如何在近处显示弹出菜单?

java - 使用 java 获取 Watson 对话的所有输出

mysql - 尝试在 MySQL 查询中嵌入 date_add 比较

powershell - 转换为 Datetime 对象时遇到问题

java - 查找与纽约午夜相对应的 UTC 日期

java - Joda time - 格式不同时解析

Java Swing - 以编程方式从 JTable 复制到剪贴板

python - 二维日期时间分组依据

java - 用天数数组填充 RecyclerView