2012-04-06 5 views
2

BST(現在の日付)とGMTの2つの日付を変換するには、calendar date before()メソッドとafter()メソッドを使用して比較できますか? BSTが英国夏時間を参照しているのかどうかはわかりません。私は英語の設定のラップトップで走っています。私は、比較が他のものよりも大きいかどうかを調べるのにどのように最善の方法があるかわかりません。 タイムゾーンは、after()メソッドとbefore()メソッドのカレンダー日付を使用して問題があることを示しています。私は2つのカレンダーに基づいて平等をチェックしていました。BST(現在の日付)とGMTの2つの日付を変換すると、メソッドの前後の日付を比較できますか?

私は日付を比較したいと思い、グレゴリアンカレンダーを使用しています。グレゴリオ暦の3つの日付があり、最初の日付から78、2番目の日付から48、3番目の日付から24をそれぞれHOURS_OF_DAYから減算しています。これらの日付はGMTです。私は現在の日付を取得し、これはBSTです。現在の日付、つまり予約日が78時間、48時間、24時間の3つの日付の範囲内にあるかどうかを調べたいと考えています。私は同じ問題を抱えていたし、答えを見つけることが明らかでなかった

Calendar calBst = new GregorianCalander(); 
calBst.setDate(date1); 
calBst.setTimezone(TimeZone.getTimeZone("BST"); 

Calendar calGmt = new GregorianCalander(); 
calGmt.setDate(date2); 
calGmt.setTimezone(TimeZone.getTimeZone("GMT"); 
calBst.before(calGmt); 
+0

私は完全にここで質問を理解していません。正確にどのクラスのオブジェクトを比較しようとしていますか?あなたが 'java.util.Date'を使っているのであれば、それらはタイムゾーンに敏感ではなく、1970-01-01 00:00:00 GMTからのミリ秒で定義されます。 – Alex

+0

こんにちはアレックス私はカレンダーを比較したいです。グレゴリオ暦の3つの日付があり、最初の日付から78、2番目の日付から48、3番目の日付から24をそれぞれHOURS_OF_DAYから減算しています。これらの日付はGMTです。私は現在の日付を取得し、これはBSTです。現在の日付、つまり予約日が78時間、48時間、24時間の3つの日付の範囲内にあるかどうかを調べたいと考えています。私はJava.Util.Date – daveb

+0

@davebでこれを行うことを望んでいますが、あなたはDateクラスを使いたいという私の答えにコメントしました。わかりません。これのために – Carlo

答えて

2

を受け取っJava.Util.Date

でこれを行うには期待しています。私たちは現在、このソリューションをプロダクションで使用しています。あなたがしなければならないのは、特定の一般的なタイムゾーンにあなたの日付を変換し、comparaisonを行うための最初の方法を使用することですjodatimeライブラリ

public static Date convertDateTimeZone(Date date, TimeZone currentTimeZone, TimeZone newTimeZone) { 
    return convertJodaTimezone(new LocalDateTime(date), DateTimeZone.forTimeZone(currentTimeZone), DateTimeZone.forTimeZone(newTimeZone)); 
} 

public static Date convertDateTimeZone(Date date, TimeZone newTimeZone) { 
    return convertDateTimeZone(date, null, newTimeZone); 
} 

public static Date convertJodaTimezone(LocalDateTime date, String srcTz, String destTz) { 
    return convertJodaTimezone(date, DateTimeZone.forID(srcTz), DateTimeZone.forID(destTz)); 
} 

public static Date convertJodaTimezone(LocalDateTime date, DateTimeZone srcTz, DateTimeZone destTz) { 
    DateTime srcDateTime = date.toDateTime(srcTz); 
    DateTime dstDateTime = srcDateTime.withZone(destTz); 
    return dstDateTime.toLocalDateTime().toDateTime().toDate(); 
} 

に基づいています。

タイムゾーンのインスタンスを取得するためにあなたがしなければならないすべては、次のとおりです。

TimeZone.getTimeZone("BST"); 
+0

ありがとうございます。私はJavaの日付ライブラリを使用してBSTをGMTに変換したいと思っていた – daveb

+0

こんにちはcarlo、上記の2つの日付が同じタイムゾーンに比較を行うことができますか? – daveb

+0

多分あなたは異なるTZを意味します。 [この興味深い議論](https://forums.oracle.com/forums/thread.jspa?threadID=1771481)によると、正しく動作するはずです。 – Carlo

0

:私はすべてのヘルプは感謝して何について

+1

+1のjoda-timeの使用 - java.util.Dateクラスは操作が非常に難しいです。 – Alex

+0

こんにちはHoucernとアレックス、ありがとう。私はjava.util.Dateクラスを使ってやりたいと思っていました。私はjodatimeを使わずにこれをどうやってできるのだろうかと疑問に思っていた – daveb

+0

私はjoda-timeなしでこれを実装しようと時間を無駄にしました。まったく明らかではないようです。 Javaライブラリのみを使用したい場合は、タイムゾーン間の時間差のようなものをハードコードする必要があり、これは非常に危険です。 –

関連する問題