MySQL和Java Time的比较



我在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.Datejava.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文档中查找有关这些方法的更多信息。。。。

希望它能帮助

相关内容

  • 没有找到相关文章

最新更新