2014-02-19 57 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次不同的偏移比较和它们归到一个共同的时区。同样,您可以选择您选择的时区并方便地处理这些时间实例。