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

6

我想把一个字符串解析成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。我该怎么做?

抱歉,我花了一些时间后找到了答案:https://dev59.com/d2Mk5IYBdhLWcg3wvQcU 感谢@jgm - Filosssof
2个回答

11

您应该将时区应用于格式化程序,而不是应用于 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
看看这个扩展代码:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接