2016-08-06 48 views
0

我使用now()存储数据库表中的当前时间戳[示例-20160807000133] 我想比较表中存储的此时间戳与java中的当前时间戳。比较java中存储在数据库中的时间戳

如何做到这一点?

我的主要任务是检查表中存储的数据是否在当前时间的一定时间间隔内。

+3

请张贴的你尝试过什么到目前为止 – Sanghita

+1

这将是最容易做的查询本身的时间戳比较的代码,而无需从Java传递日期时间变量。您使用的是哪个数据库,哪些表是您的查询定位? –

回答

0

java.time

java.time框架是建立在Java 8和更高版本。这些课程取代了老的麻烦日期时间课程,如java.util.Date,.Calendar,& java.text.SimpleDateFormatJoda-Time团队还建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。

许多java.time功能被移植到Java中,并在ThreeTen-Backport中被移植到Java中,并进一步适用于Android中的ThreeTenABP

String input = "20160807000133"; 
DateTimeFormatter BASIC_ISO_DATETIME = DateTimeFormatter.ofPattern ("uuuuMMddHHmmss"); // Make constant somewhere in your codebase. 

LocalDateTime ldt = LocalDateTime.parse (input , BASIC_ISO_DATETIME); 

转储到控制台。

System.out.println ("input: " + input + " | ldt: " + ldt); 

输入:20160807000133 | LDT:2016-08-07T00:01:33

时区

请注意,您的输入数据使得没有包括有关时区或任何信息的错误偏移从-UTC。因此,它不是而是代表时间线上的一刻。如果这些数据是针对巴黎的,那么这个数据与蒙特利尔的数据是不同的。

如果您知道特定时区的上下文,请在数据库查询中使用此值之前应用ZoneId

ZoneId zoneId = ZoneId.of ("America/Montreal"); 
ZonedDateTime zdt = ldt.atZone (zoneId); 

ZDT:2016-08-07T00:01:33-04:00 [美国/蒙特利尔]

数据库

如果你的JDBC驱动程序与JDBC 4.2或更高版本的规定,您应该能够通过setObject & getObject直接传递/获取java.time类型。

如果不是,则使用添加到旧类的新方法进行转换。对于java.sql.Timestamp,这意味着要经过Instant,这是UTC时间线上的一个时刻,分辨率高达纳秒。我们可以从我们的ZonedDateTime中提取Instant对象。

java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant()); 
myPreparedStatement.setTimestamp(ts); 

...和...

java.sql.Timestamp ts = myResultSet.getTimestamp(1); 
Instant instant = ts.toInstant(); 
ZoneId zoneId = ZoneId.of ("America/Montreal"); 
ZonedDateTime zdt = instant.atZone (zoneId);