2014-10-16 87 views
3

的我寫這篇文章格式:Jodatime DateTimeFormatter需要打印GMT時間,而不是UTC

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是正確的輸出,但我真的需要格林威治標準時間。

我該如何解決這個問題?

+0

解析後,您可能只需將解析的'UTC'後綴替換爲'GMT'(因爲Joda-Time不支持術語GMT)。 – 2014-10-17 04:00:27

回答

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")); 
    } 
} 
0

我曾嘗試下面的代碼和它的工作:

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

我喬達庫版本是2.9.1的方式。