我写这个格式化程序:
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。
我该如何解决这个问题?
答案 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。