2014-11-03 111 views
0

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

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

+0

我不明白,你是从数据库获得一个字符串,你需要转换它,或者你得到一个java.sql.Time? – 2014-11-03 18:43:27

+0

我得到java.sql.Time – 2014-11-03 18:44:20

回答

1

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

要转换java.util.Date,或为java.sql.Time,日期等。从java.util.Date延伸到一个简单的长,你可以调用的getTime():http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#getTime()

可以使用System.currentTimeMillis()获得当前时间,以毫秒为单位表示为与unix时代(与getTime()的结果相当)。

一旦你的,比较这很容易:

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的==了,因为它是精确到毫秒,所以它会在实践中很少发生,除非你使用范围或降低精度,说,第二或分:

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 

如果您需要更复杂的比较,如天或一个月,你应该使用一个图书馆一样乔达时间,或内置在像Calendar类,鉴于西方日历如何划分,数学方式更复杂 年。

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 

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

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的答案,这可能是更有效的解决方案。

相关问题