Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将时间与时区进行比较_Java_Date_Time_Timezone - Fatal编程技术网

Java将时间与时区进行比较

Java将时间与时区进行比较,java,date,time,timezone,Java,Date,Time,Timezone,我的表有一个列,其数据类型是timestamp with timezone。数据库中的值类似于 2001年11月26日12.00.00.000000000下午7:00 或2001年11月26日12.00.00.000000000下午8:00 我有一个在UTC时区运行的tomcat服务器。我知道如何比较具有相同时区的两个日期,但我无法确定是否可以将服务器时间与具有时区详细信息(如-7.00、-8.00或+5:30)的db时间进行比较 java中有没有一种方法可以将一个时间从数据库转换为公共时区

我的表有一个列,其数据类型是timestamp with timezone。数据库中的值类似于

  • 2001年11月26日12.00.00.000000000下午7:00
  • 2001年11月26日12.00.00.000000000下午8:00
我有一个在UTC时区运行的tomcat服务器。我知道如何比较具有相同时区的两个日期,但我无法确定是否可以将服务器时间与具有时区详细信息(如
-7.00
-8.00
+5:30
)的db时间进行比较

java中有没有一种方法可以将一个时间从数据库转换为公共时区,然后与另一个时间进行比较?

您可以使用它方便地将偏移量和日期解析为公共时区(比如UTC)

以您的帖子中提到的两个时间实例为例:

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次,并将其标准化为一个公共时区。同样,您也可以选择自己选择的时区,方便地处理这些时间实例。

看看Joda DateTime。这是非常有力的所有日期时间的问题。嗯,你是如何读取db值的?JDBC不支持带时区的sql columntype时间戳,至少在Java8之前不支持。类java.sql.Timestamp仅与不带时区的Timestamp兼容。@dognose JodaTime很好,但不能在这里发挥魔力,并且有其自身的局限性。@MenoHochschild我被您关于带时区与不带时区的陈述弄糊涂了。两种类型都存储相同的值,都没有时区信息(名称“WITH TIMEZONE”有点用词不当)。不同之处在于它们如何处理包含时区信息的输入,其中“无时区”表示在解析过程中忽略任何指定的时区指示器,并且假定日期时间已为UTC。“带时区”表示注意输入tz,并执行UTC调整。因此,就JDBC和java.sql.Timestamp而言,这两种类型的行为应该相同。@BasilBourque嗨,我的语句与ANSI-sql有关。JDBC只能将可用的SQL映射到Java,实际上不支持SQL选项“带时区”。映射为:java.sql.Date-Date,java.sql.Timestamp-Timestamp无时区,java.sql.Time无时区。SQL将什么标记为时区是Java的共同理解,而不是偏移量。Java8将使用OffsetTime和OffsetDateTime提供新的db映射。JodaTime不提供这两种新类型。