2012-04-06 5 views
2

Wie konvertiert man 2 Datumsangaben in BST (aktuelles Datum) und die andere in GMT, so dass sie mit dem Kalenderdatum vor() und after() Methoden verglichen werden können? Ich weiß nicht, ob BST sich auf British Summer Time bezieht. Ich laufe auf einem Laptop mit englischen Einstellungen. Ich weiß nicht, wie man den Vergleich am besten macht, um zu sehen, ob einer größer als der andere oder gleich ist. Ich denke, die Zeitzone ist das Problem für mich erfolgreich mit dem Kalander Datum nach() und vor() -Methoden. Ich überprüfte die Gleichheit basierend auf den 2 Kalendern.Wie konvertiert man 2 Daten in BST (aktuelles Datum) und die andere in GMT, so dass das Datum vor und nach Methoden verglichen werden kann?

Ich möchte Daten vergleichen und Gregorianischen Kalender verwendet haben. Ich habe 3 gregorianische Kalenderdaten und habe 78 vom ersten Datum, 48 vom zweiten und 24 vom 3. Datum vom HOURS_OF_DAY für jedes abgezogen. Diese Daten sind in GMT. Ich bekomme dann mein aktuelles Datum und das ist in BST. Ich suche zu bestimmen, wann mein aktuelles Datum, d. H. Buchungsdatum, innerhalb der 3 Daten liegt, d. H. Mit 78 Stunden, 48 Stunden und 24 Stunden. Ich hoffe, dies zu tun mit Java.Util.Date

Jede Hilfe erhielt dankbar

+0

Ich verstehe nicht ganz die hier Frage. Welche Klasse von Objekten versuchen Sie zu vergleichen? Wenn Sie 'java.util.Date' verwenden, sind diese für Zeitzonen nicht empfindlich, sie sind in Millisekunden seit 1970-01-01 00:00:00 GMT definiert. – Alex

+0

Hallo Alex Ich möchte Kalender vergleichen. Ich habe 3 gregorianische Kalenderdaten und habe 78 vom ersten Datum, 48 vom zweiten und 24 vom 3. Datum vom HOURS_OF_DAY für jedes abgezogen. Diese Daten sind in GMT. Ich bekomme dann mein aktuelles Datum und das ist in BST. Ich suche zu bestimmen, wann mein aktuelles Datum, d. H. Buchungsdatum, innerhalb der 3 Daten liegt, d. H. Mit 78 Stunden, 48 Stunden und 24 Stunden. Ich hoffe, dies mit Java.Util.Date – daveb

+0

@daveb zu tun, aber Sie haben gerade zu meiner Antwort kommentiert, dass Sie die Date-Klasse verwenden möchten. Ich verstehe nicht. – Carlo

Antwort

2

Was:

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

danke dafür. Ich wollte die BST zu GMT mit der Java-Date-Bibliothek konvertieren – daveb

+0

Hallo Carlo, ermöglicht das obige die beiden Daten in der gleichen Zeitzone, wenn Sie den Vergleich durchführen? – daveb

+0

Vielleicht meinst du andere TZs. Laut [dieser interessanten Diskussion] (https://forums.oracle.com/forums/thread.jspa?threadID=1771481) sollte es korrekt funktionieren. – Carlo

0

Ich hatte das gleiche Problem und finden die Antwort war nicht ersichtlich. Wir verwenden diese Lösung jetzt in der Produktion und es funktioniert gut. Es basiert auf jodatime Bibliothek

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(); 
} 

Alles, was Sie tun müssen, ist die erste Methode zu verwenden, um Ihre Daten in eine spezifische gemeinsame Zeitzone zu konvertieren und die comparaison zu tun.

die Zeitzone Instanz bekommen alles, was Sie tun müssen, ist:

TimeZone.getTimeZone("BST"); 
+1

+1 auf die Verwendung von joda-Zeit - die java.util.Date-Klasse ist sehr schwer mit zu arbeiten. – Alex

+0

Hallo Houcern und Alex, danke dafür. Ich hatte gehofft, mit java.util.Date Klasse zu tun. Ich fragte mich, wie ich das tun könnte, ohne jodatime – daveb

+0

zu verwenden Ich habe meine Zeit verloren zu versuchen, dies ohne joda-Zeit zu implementieren. Es scheint überhaupt nicht offensichtlich zu sein. Wenn Sie nur Java-Bibliotheken verwenden möchten, müssen Sie Dinge wie Zeitunterschied zwischen Zeitzonen fest codieren, und das ist sehr riskant. –