我在MySQL中有一个datetime字段,我通过调用result.getString('date')来访问,现在我想检查天气,当前日期和时间在Java中已超过MySQL时间或在MySQL时间到之前检查天气是否激活了结果。
MySQL的日期时间格式为:2011-12-30 17:10:00
,如何将此字符串与Java时间进行比较?
答案 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)
JDBC 4.2及更高版本:
Boolean isFutureTask = myResultSet.getObject( "myDateColumn" , Instant.class )
.isAfter( Instant.now() ) ;
旧的JDBC:
Boolean isFutureTask = myResultSet.getTimestamp( … )
.toInstant()
.isAfter( Instant.now() ) ;
其他答案是正确的,但使用过时的课程。 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
有新的方法可以转换为Instant
。 Instant
是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文档中查找有关这些方法的更多信息....
希望有所帮助