2014-02-19 94 views
1

我的表有一列,其數據類型是帶時區的時間戳。在數據庫中的值是一樣的東西Java比較時間與時區

  • 26-NOV-01 12.00.00.000000000 PM -07:00
  • 26-NOV-01 12.00.00.000000000 PM -08:00

我這是在UTC時區運行Tomcat服務器。我知道如何比較具有相同時區的兩個日期,但我無法弄清楚是否可以將服務器時間與具有時區詳細信息的db時間比較,如-7.00-8.00+5:30

在Java中有一種方法將時間從數據庫轉換爲常見時區,然後將其與另一時間進行比較?

+3

看看Joda DateTime。這是非常強大的所有DateTime問題。 http://www.joda.org/joda-time/ – dognose

+0

嗯,你如何讀取db值? JDBC不支持sql-columntype TIMESTAMP WITH TIMEZONE,至少在Java 8之前不支持。類java.sql.Timestamp只與TIMESTAMP WITHOUT TIMEZONE兼容。 –

+0

@ dognose JodaTime很好,但在這裏做不了魔法,並有其自身的侷限性。 –

回答

1

您可以使用joda-time來方便地將偏移量和日期解析爲常見的(比如UTC)。

以在您的文章中提到的2個時刻的例子:

String time1 = "26-NOV-01 12.00.00.000000000 PM -07:00"; 
String time2 = "26-NOV-01 12.00.00.000000000 PM -08:00"; 
DateTimeFormatter parser = DateTimeFormat.forPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS aa Z").withZoneUTC(); // joda time date time formatter instance with a common UTC timezone 

System.out.println(parser.parseDateTime(time1)); // parse to date time - gives: 2001-11-26T19:00:00.000Z 
System.out.println(parser.parseDateTime(time2)); // parse to date time - gives: 2001-11-26T20:00:00.000Z 

System.out.println(parser.parseDateTime(time2).compareTo(parser.parseDateTime(time1))); // Comparing both the times here - gives: 1 

在這裏,你可以到2次不同的偏移比較和它們歸到一個共同的時區。同樣,您可以選擇您選擇的時區並方便地處理這些時間實例。