比较MySQL和Java时间

时间:2011-06-01 15:05:44

标签: java mysql datetime time

我在MySQL中有一个datetime字段,我通过调用result.getString('date')来访问,现在我想检查天气,当前日期和时间在Java中已超过MySQL时间或在MySQL时间到之前检查天气是否激活了结果。

MySQL的日期时间格式为:2011-12-30 17:10:00,如何将此字符串与Java时间进行比较?

6 个答案:

答案 0 :(得分:4)

在Java中,您可以使用Date从字符串构造SimpleDateFormat

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
}

您可以使用基本算术和(I think )等式运算符在数据库中执行类似的操作:+->,{ {1}}等,以及MySQL's date and time functions

...虽然我很想知道您使用<代替ResultSet#getTimestamp()的原因。


另一个建议:考虑使用Joda Time代替getString()java.util.Date。见Should I use Java date and time classes or go with a 3rd party library like Joda Time?

答案 1 :(得分:3)

在JDK 8之前

您可以使用ResultSet.getDate('date')来检索Date对象。然后使用方法Date.before()Date.after()进行检查。

JDK 8或更高版本

请参阅下面的Basil Bourque answer

答案 2 :(得分:1)

为什么不使用getDate('date')代替getString()并使用日期before()after()

答案 3 :(得分:1)

TL;博士

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 Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

日期时间类型

您应将日期时间值存储为date-time type in your database。我相信在MySQL中会TIMESTAMP类型(但我自己也是Postgres人)。

然后使用java.sql.Timestamp类型将数据移入/移出数据库。

java.sql.Timestamp ts = myResultSet.getTimestamp( 1 );

立即从java.sql转换为java.time。 java.sql类是旧的日期时间类的一部分,这些类已被证明设计糟糕,令人困惑且麻烦。仅在更新JDBC驱动程序以直接处理java.time类型之前使用它们。

旧的java.util.Timestamp有新的方法可以转换为InstantInstant是UTC时间轴上的一个时刻,分辨率为纳秒。

java.time.Instant instant = ts.toInstant();

获取当前时刻。

Instant now = Instant.now();

比较

Boolean isStoredDateTimePast = now.isAfter( instant );

JDBC 4.2及更高版本中,您的JDBC driver可以通过ResultSet::getObject方法直接访问数据库中的值作为Instant对象。

如果必须解析该字符串,请将其转换为标准ISO 8601格式。用T替换中间的空格。假设字符串表示从UTC的偏移量为零,则为Z追加Zulu,这意味着UTC。默认情况下,java.time类以ISO 8601格式解析/生成字符串。

String inputOriginal = "2011-12-30 17:10:00".
String input = inputOriginal.replace( " " , "T" ) + "Z" ;
Instant instant = Instant.parse( input );

答案 4 :(得分:0)

你可以使用非常容易比较日期的Joda DateTime api,我们有相同的使用要求,它采用mysql datetime格式并创建joda datetime对象进行比较。

答案 5 :(得分:-1)

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

希望有所帮助