如何使用org.joda.time设置时区?

时间:2014-06-23 13:34:21

标签: java jodatime

我想将一个字符串解析为DateTime对象:

DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm");
DateTime dt = fmt.parseDateTime(stringDate + " " +     stringTime).withZone(DateTimeZone.forID("Europe/Dublin"));

如果我介绍时间06/22/2014 10:43我得到

  

06/22/2014 8:43 +0100,

但我想得到

  

06/22/2014 10:43 +0100

我该怎么做?

2 个答案:

答案 0 :(得分:9)

您应该将时区应用于格式化程序,而不是DateTime。否则,日期将在您当地的时区中进行解析,而您只需将其转置到所需的时区。

DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm")
                        .withZone(DateTimeZone.forID("Europe/Dublin"));
DateTime dt = fmt.parseDateTime("06/22/2014 10:43");

答案 1 :(得分:1)

看看这个扩展代码:

String s = "06/22/2014 10:43";
DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm"); // uses local zone
DateTime dt1 = fmt.parseDateTime(s).withZone(DateTimeZone.forID("Europe/Dublin"));
DateTime dt2 = fmt.withZone(DateTimeZone.forID("Europe/Dublin")).parseDateTime(s);
DateTime dt3 =
  fmt.parseDateTime(s).withZoneRetainFields(DateTimeZone.forID("Europe/Dublin"));
System.out.println(dt1); // 2014-06-22T09:43:00.000+01:00 (from my zone Berlin to Dublin)
System.out.println(dt2); // 2014-06-22T10:43:00.000+01:00
System.out.println(dt3); // 2014-06-22T10:43:00.000+01:00