比较数据库日期和当前时间

时间:2014-11-03 18:42:24

标签: java

我需要将当前时间与从数据库中获取的时间进行比较。我正在以java.sql.Time格式(16:12:00)从Java类中的数据库中获取时间。

如果当前时间与数据库中存在的时间匹配,我只需要显示错误消息。

2 个答案:

答案 0 :(得分:1)

在处理日期和时间时,您可以使用Joda Time等众多库中的一个,或者您可以简单地将时间视为自1970年1月1日(unix epoch)以来的给定毫秒,表示为正常长度。

要将从java.util.Date扩展的java.util.Date或java.sql.Time,Date等转换为简单的long,可以调用getTime():http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#getTime()

当前时间,以unix epoch的毫秒数表示,与getTime()的结果相当,可以使用System.currentTimeMillis()获得;

一旦你有了,比较它很容易:

Time dbTime = // the time you obtained from the db
long dbLong = dbTime.getTime();
long now = System.currentTimeMillis();

if (dbLong < now) // data in the db is in the past
if (dbLong > now) // data in the db is in the future
if (dbLong == now) // data in the db is exactly now

现在处理dbLong ==,因为它精确到毫秒,所以在实践中很少会发生,除非你使用一个范围或降低精度,比如第二或分钟:< / p>

long dbLongSeconds = dbLong / 1000;
long dbLongMinutes = dbLong / (60*1000);
long nowSeconds = now / 1000;
long nowMinutes = now / (60*1000);

if (dbLongSeconds == nowSeconds) // data in the db is in this second
if (dbLongMinutes == nowMinutes) // data in the db is in this minute

如果您需要更复杂的比较,例如日或月,您应该使用像Joda Time这样的库,或者像Calendar一样构建类,因为考虑到西方日历划分年份,数学会更复杂。

答案 1 :(得分:0)

要将当前时间与数据库中的时间进行比较,您可以简单地从System.currentTimeMillis()构造一个sql.Time并比较两个toString(),如下所示:

java.sql.Time serverTime = getServerTime();
java.sql.Time currentTime = new java.sql.Time(System.currentTimeMillis());

if(serverTime.toString().compareTo(currentTime.toString()) == 0)
{
   //yay
}
else //nay

您也可以使用它的compareTo方法直接比较两个sql.Time,但这比较棘手。 这是因为即使sql.Time的setDate / Year / Month已被弃用,如果你使用它们会引发异常(这是有意义的,因为它们不是日期,只有一次)sql.Time的compareTo使用它的超类实现,这意味着它不仅要比较时间而且还要比较日期,这样会使你的数据库sql.Time对象很可能总是有1970.01.01的日期,而你从System.currentTimeMillis()构造的任何sql.Time都会有当前的日期。你可以通过使用如图所示的Calendar对象来解决这个问题。

Calendar tmp = new GregorianCalendar();
tmp.setTimeInMillis(System.currentTimeMillis());
tmp.set(Calendar.YEAR, 1970);
tmp.set(Calendar.MONTH, 0); // 0 == January
tmp.set(Calendar.DATE, 1);
tmp.set(Calendar.MILLISECOND, 0);

java.sql.Time currentTime = new java.sql.Time(c.toInstant().toEpochMilli());        
java.sql.Time serverTime = getServerTime();

if(currentTime.compareTo(serverTime) == 0)
{
   //yay
}
else //nay  

或者您可以直接比较Simone Gianni的答案中的长时间,这可能是更有效的解决方案。