Jodatime DateTimeFormatter需要打印GMT时间而不是UTC

时间:2014-10-16 16:02:17

标签: java jodatime datetime-format

我写这个格式化程序:

TimeZone timeZone = TimeZone.getTimeZone("GMT");
private static final String FORMAT_RFC_1123_DATE_TIME = "EEE, dd MMM yyyy HH:mm:ss zzz";
private final DateTimeFormatter dateTimeFormat = forPattern(FORMAT_RFC_1123_DATE_TIME).withLocale(US).withZone(DateTimeZone.forTimeZone(timeZone));
date.toString(dateTimeFormat)

转换很好,但它会写Sun, 06 Nov 1994 07:49:37 UTC而不是Sun, 06 Nov 1994 07:49:37 GMT

我知道UTC是正确的输出,但我确实需要GMT。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

看起来JodaTime不支持这一点。如果你试试

org.joda.time.DateTimeZone.forTimeZone(TimeZone.getTimeZone("GMT"))

你实际上最终得到了UTC。来自DateTimeZone的javadoc声明:

  

此库仅使用术语UTC。

你可能自己继承DateTimeZone并获得你需要的东西,但从我可以告诉的其他方面来说,JodaTime不会做你想做的事情。下面是一个例子,虽然我没有声称它以任何形式或形式起作用。

public class GMTDTZ extends DateTimeZone {
    public GMTDTZ() { super("GMT"); }

    @Override public String getNameKey(long instant) { return null; }

    @Override public int getOffset(long instant) { return 0; }

    @Override public int getStandardOffset(long instant) { return 0; }

    @Override public boolean isFixed() { return true;}

    @Override public long nextTransition(long instant) { return instant; }

    @Override public long previousTransition(long instant) { return instant; }

    @Override public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof DateTimeZone)) return false;
        return (((DateTimeZone) o).getID().equals("GMT"));
    }
}

答案 1 :(得分:2)

我已经尝试了以下代码并且它有效:

date.withZone(DateTimeZone.forID("GMT"))
    .toString("EEE, dd MMM yyyy HH:mm:ss zzz");

顺便说一句,我的joda库版本是2.9.1。