java – Joda解析在GMT时区的ISO8601日期

我有一个ISO 8601的日期,让我们说:2012-01-19T19:00-05:00

我的机器时区是GMT 1

我正在尝试使用joda解析它并将其转换为相应的格林尼治标准时间日期和时间:

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

现在我期望的结果是2012年1月20日00:00:00 CET 2012

相反我得到:Fri Jan 20 01:00:00 CET 2012

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

有没有办法解析伪造成不同时区的日期?

编辑:基本上问题是当我调用toDate()方法.该方法将DateTime转换为Date,因为我需要做,但是我在本地时间转换它.

有人知道不会施加此限制的转换方法吗?

最佳答案
这是一个工作的groovy测试用例.显示可以显示其他时区的次数.

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日期 - 代码日志