2011-07-21 6 views
0

このメソッドを使用して日付のタイムゾーンを変換しました。この方法の実行時間をさらに短縮するにはどうすればいいですか?Javaを使用して日付のタイムゾーンをより速く変換する

public static Timestamp convertTimeZone(final Timestamp fromDate, final TimeZone fromTZ, final TimeZone toTZ){ 
    Long timeInDate = fromDate.getTime() ; 
    int fromOffset = fromTZ.getOffset(timeInDate); 
    int toOffset = toTZ.getOffset(timeInDate); 
    Timestamp dateStamp = new Timestamp(fromDate.getTime()); 

    if (fromOffset >= 0){ 
     int diff = 0; 

     if (toOffset > 0){ 
      diff = (fromOffset - toOffset); 
     } else { 
      diff = (fromOffset + Math.abs(toOffset)); 
     } 

     long date = fromDate.getTime() - diff; 
     dateStamp.setTime(date); 
    } else { 
     int diff = 0; 

     if (toOffset > 0){ 
      diff = (Math.abs(fromOffset) + toOffset); 
     } else { 
      diff = (Math.abs(fromOffset) - Math.abs(toOffset)); 
     } 

     long date = fromDate.getTime() + diff; 
     dateStamp.setTime(date); 
    } 

    return dateStamp; 
} 
+0

これはO(1)ですが、「実行時間」はどういう意味ですか? – Bozho

+0

これは本当にここにないhttp://codereview.stackexchange.comにあるはずです。 – Shahzeb

+0

タイムゾーンを変換するのにかかる時間を改善する必要があります。 – leftrright

答えて

1

開始するには、Calendarオブジェクトに日付を格納することができます。これを異なるタイムゾーン形式で表示することは、SimpleDateFormatに適用する設定の問題です。

技術的に日付はすべてのタイムゾーンで同じです(内部値は同じです)。タイムゾーンの概念を適用することで、日付フォーマッタはオフセットを調整して表示することができます。つまり、ロンドン時刻の17:00を表すDateは、ニューヨークの12:00を表すDateと等しくなります。 GMT対ESTタイムゾーンで表示することは、日付フォーマッターの機能となります。

0

これはあまり答えはありませんが、ローカルタイムではなくUTCタイムとしてデータベースにタイムスタンプを保存することをお勧めします。それはそれを表現するには適していませんので、Timestampは、タイムゾーンの概念を持っていないことを

DateTime dt = new DateTime(DateTimeZone.forID("GMT")); 
System.out.println(dt); // 5 am 
dt = dt.withZone(DateTimeZone.forID("EET")); 
System.out.println(dt); // 8 am 

注:そして、それはこのように見えるかもしれjoda-timeでのみDateFormat.setTimeZone()

2

を設定するプレゼンテーション層の上に異なるタイムゾーンのためにそれを表示します。

あなたの解はO(1)なので、実行時間は良いでしょう。しかし、読むのは難しいです。

+0

joda-timeを紹介する+1(これ以上のポイントは必要ありません) – Shahzeb

+0

コードが途切れました。残りを追加できますか? OPに役立つかもしれないので、あなたは 'LocalDate'のコンセプトについて言及することもできます。プログラマーがJavaの日付とカレンダーとタイムスタンプを使いこなしているのを見ると、いつも気分が悪いです。 –

+0

申し訳ありませんが、それは冗長な行です。私が次の行で指摘したように、あなたはタイムスタンプで良いtz表現を得ることができません(別の日付を設定しない限り、OPがやっているように、完全には良くないです) – Bozho

関連する問題