2

TimeZone id の例を使用して、同等の GMT を取得したいと思います。

Pacific/Fiji ==> DST が 2012 年 10 月 21 日 (日) に開始されたため、GMT+13 のはずですが、代わりに GMT+12 が表示されます。

以下は私のコードです:

public static void main(String[] args){

    String m_utcDatePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS";
    String pnrCreation = "2012-12-10T01:14:22.000";

    Calendar calendar = convertDateStringToCalendar(pnrCreation, m_utcDatePattern);

    double offset = TimeZone.getTimeZone("Pacific/Fiji").getOffset(calendar.getTimeInMillis())/(60*60*1000.0);

    System.out.println("GMT+" + (int) offset);  //result is GMT+12, it should be GMT+13
}


//Date String to Calendar
public static Calendar convertDateStringToCalendar(String value, String fromPattern)     
{
       Calendar calendar;

       if (value == null)
       {
           return null;
       } 
       else 
       {
           DateFormat dateFormat = new SimpleDateFormat(fromPattern);
           Date date;
           try 
           {
               date = dateFormat.parse(value);
               calendar = Calendar.getInstance();
               calendar.setTime(date);
           } 
           catch (ParseException e) 
           {
               return null;
           }

           return calendar;
       }

}

前もって感謝します!:-)

よろしく、
ラックス

4

1 に答える 1

3

いずれにせよ、あなたのコードは現時点では少し壊れていますが、根本的な問題は、古いタイム ゾーン データを使用していることです。

これが変更された正確なリリースを正確に特定することはできませんが、TZDB 2012e リリースでは、フィジーには次のルールがありました。

Rule    Fiji    2012    only    -   Jan 22  3:00    0   -

2012h リリースでは、次のものがありました。

Rule    Fiji    2012    max -   Jan Sun>=18 3:00    0   -

(その他の適切な変更と共に。)

フィジーはサマータイムをあきらめるつもりだったと思いますが、結局維持することにしました。

「通常の」Java のタイム ゾーン データベースを更新するのがどれほど簡単かはわかりません。代わりにJoda Timeを使用することをお勧めします。これにより、最新のデータからローカルに構築されたバージョンを使用できます。また、はるかにクリーンな API です :)

于 2012-12-11T12:25:10.657 に答える