Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 Oracle db能够比较不同时区的时间戳吗?_Java_Spring_Oracle_Date_Spring Data Jpa - Fatal编程技术网

Java Oracle db能够比较不同时区的时间戳吗?

Java Oracle db能够比较不同时区的时间戳吗?,java,spring,oracle,date,spring-data-jpa,Java,Spring,Oracle,Date,Spring Data Jpa,我想知道Oracle是否能够比较不同时区的日期,如: 2016年12月26日3:58:16.491476 AM-06:00>2016年12月26日3:58:16.491476 AM+05:00 顺便说一句,我用JPA做这个比较,目的是查找一小时前创建的所有行 我发现我可以使用After关键字来查找它(即findMeasureDateAfter)ISO 8601 首先,如果这些输入实际上是问题中给出的字符串,则尽可能使用标准格式。标准格式对人类来说是直观的,并且更容易被计算机解析。实际上,java

我想知道Oracle是否能够比较不同时区的日期,如:

2016年12月26日3:58:16.491476 AM-06:00>2016年12月26日3:58:16.491476 AM+05:00

顺便说一句,我用JPA做这个比较,目的是查找一小时前创建的所有行

我发现我可以使用After关键字来查找它(即findMeasureDateAfter)

ISO 8601 首先,如果这些输入实际上是问题中给出的字符串,则尽可能使用标准格式。标准格式对人类来说是直观的,并且更容易被计算机解析。实际上,java.time类在解析/生成字符串时默认使用ISO8601格式

java.time 虽然我不知道Oracle中的查询(我自己也是一名Postgres人员),但我可以在Java方面更多地展示如何形成查询

理想情况下,我们将把该输入字符串解析为
OffsetDateTime
,因为它没有时区指示,只有UTC的偏移量。分区是一个偏移量加上一组处理异常(如夏令时(DST))的规则。时区以
大陆/地区
的格式命名,例如
美洲/蒙特利尔

不幸的是,java 8中的java.time实现在解析
DateTimeFormatter
类中UTC的偏移量时存在一些错误。因此,在Java9之前,这里有一些hack代码需要解析为
ZonedDateTime
,并转换为更合适的
OffsetDateTime

String input = "12/26/2016 3:58:16.491476 AM -06:00";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu h:m:s.SSSSSS a z" , Locale.ENGLISH );
OffsetDateTime odt = ZonedDateTime.parse ( input , f ).toOffsetDateTime ();
odt.toString():2016-12-26T03:58:16.491476-06:00

重复你的结束时刻

如果您的JDBC驱动程序支持JDBC 4.2或更高版本,则可以通过
PreparedStatement::setObject
直接传递这些java.time类型

如果不是,则转换为java.sql类型。要转换,请查看添加到旧类的新方法。
from
方法采用一个
瞬间
,它是UTC时间线上的一个瞬间。您可以将
即时
视为去掉其偏移量的
OffsetDateTime
。调用
OffsetDateTime::toInstant
提取
即时

java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() ) ;
在开始和结束的时候都这样做。将这些
java.sql.Timestamp
对象传递给您的
PreparedStatement

java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

ISO 8601 首先,如果这些输入实际上是问题中给出的字符串,则尽可能使用标准格式。标准格式对人类来说是直观的,并且更容易被计算机解析。实际上,java.time类在解析/生成字符串时默认使用ISO8601格式

java.time 虽然我不知道Oracle中的查询(我自己也是一名Postgres人员),但我可以在Java方面更多地展示如何形成查询

理想情况下,我们将把该输入字符串解析为
OffsetDateTime
,因为它没有时区指示,只有UTC的偏移量。分区是一个偏移量加上一组处理异常(如夏令时(DST))的规则。时区以
大陆/地区
的格式命名,例如
美洲/蒙特利尔

不幸的是,java 8中的java.time实现在解析
DateTimeFormatter
类中UTC的偏移量时存在一些错误。因此,在Java9之前,这里有一些hack代码需要解析为
ZonedDateTime
,并转换为更合适的
OffsetDateTime

String input = "12/26/2016 3:58:16.491476 AM -06:00";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu h:m:s.SSSSSS a z" , Locale.ENGLISH );
OffsetDateTime odt = ZonedDateTime.parse ( input , f ).toOffsetDateTime ();
odt.toString():2016-12-26T03:58:16.491476-06:00

重复你的结束时刻

如果您的JDBC驱动程序支持JDBC 4.2或更高版本,则可以通过
PreparedStatement::setObject
直接传递这些java.time类型

如果不是,则转换为java.sql类型。要转换,请查看添加到旧类的新方法。
from
方法采用一个
瞬间
,它是UTC时间线上的一个瞬间。您可以将
即时
视为去掉其偏移量的
OffsetDateTime
。调用
OffsetDateTime::toInstant
提取
即时

java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() ) ;
在开始和结束的时候都这样做。将这些
java.sql.Timestamp
对象传递给您的
PreparedStatement

java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目为Android s采用了Three-Ten Backport(如上所述)