我在MySQL中有一个日期时间字段,我通过调用result.getString('date')访问它,现在我想检查Java中的当前日期和时间是否已经超过MySQL时间或在MySQL时间之前,以检查结果是否被激活。
MySQL中的Datetime格式为:2011-12-30 17:10:00
,如何将此字符串与Java时间进行比较?
在Java中,可以使用SimpleDateFormat
:从字符串构造Date
String text = "2011-12-30 17:10:00";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text);
Date now = new Date();
if (date.after(now))
{
// do stuff
}
相反,您可以在数据库中执行类似的操作,使用基本算术和(Ithink)相等运算符:+
、-
、>
、<
等,以及MySQL的日期和时间函数。
尽管我很想知道你为什么用getString()
而不是ResultSet#getTimestamp()
。
另一个建议是:考虑使用Joda Time,而不是java.util.Date
和java.util.Calendar
。请参阅我应该使用Java日期和时间类还是使用Joda time等第三方库?
JDK 8之前的
可以使用ResultSet.getDate('date')
检索Date对象。然后使用方法Date.before()
或Date.after()
进行检查。
JDK 8或更高版本
请参阅下面Basil Bourque的回答。
为什么不直接使用getDate('date')
而不是getString()
,并使用Date的before()
或after()
?
tl;dr
JDBC 4.2及更高版本:
Boolean isFutureTask = myResultSet.getObject( "myDateColumn" , Instant.class )
.isAfter( Instant.now() ) ;
较旧的JDBC:
Boolean isFutureTask = myResultSet.getTimestamp( … )
.toInstant()
.isAfter( Instant.now() ) ;
java.time
其他答案是正确的,但使用了过时的类。java.util.Date
/.Calendar
类已被java 8及更高版本中内置的java.time框架所取代。
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。
大部分java.time功能都是向后移植到Java6&ThreeTen背包中的7,并在ThreeTenABP中进一步适应Android。
日期时间类型
您应该将日期时间值作为日期时间类型存储在数据库中。我相信MySQL中会是TIMESTAMP
类型(但我自己也是一名研究生)。
然后使用java.sql.Timestamp
类型将数据移入/移出数据库。
java.sql.Timestamp ts = myResultSet.getTimestamp( 1 );
立即从java.sql转换为java.time。java.sql类是那些旧的日期-时间类的一部分,这些类被证明设计糟糕、令人困惑和麻烦。仅在JDBC驱动程序更新为直接处理java.time类型之前使用它们。
旧的CCD_ 23具有用于转换到CCD_。Instant
是UTC时间线上的一个时刻,分辨率为纳秒。
java.time.Instant instant = ts.toInstant();
获取当前时刻。
Instant now = Instant.now();
比较。
Boolean isStoredDateTimePast = now.isAfter( instant );
在JDBC 4.2及更高版本中,JDBC驱动程序可以通过ResultSet::getObject
方法直接访问数据库中的值,作为Instant
对象。
如果必须解析该字符串,请将其转换为标准ISO 8601格式。将中间的空格替换为T
。假设字符串表示与UTC的偏移量为零,则为Zulu
追加Z
,这意味着UTC。默认情况下,java.time类解析/生成ISO 8601格式的字符串。
String inputOriginal = "2011-12-30 17:10:00".
String input = inputOriginal.replace( " " , "T" ) + "Z" ;
Instant instant = Instant.parse( input );
您可以使用Joda DateTime api,它非常容易比较日期,我们在使用中有相同的要求,即采用mysql日期时间格式并创建用于比较的Joda日期时间对象。
java.util.Calendar.getInstance().getTime().getTime()
将为您获取以毫秒为单位的当前日期和时间
ResultSet.getDate('name of column').getTime()
将从数据库中获取日期和时间。。。。
你可以像处理数字一样进行逻辑运算。。。。。例如,这将检查系统时间是否大于数据库中的日期时间
java.util.Calendar.getInstance().getTime().getTime() > new java.sql.Date(WIDTH).getTime();
您可以在API文档中查找有关这些方法的更多信息。。。。
希望它能帮助