我需要比较当前时间和我从数据库获取的时间。我在java.sql.Time格式(16:12:00)中从Java类的数据库中获取时间。比较数据库时间和当前时间
如果当前时间与数据库中存在的时间匹配,我只需要显示一条错误消息。
我需要比较当前时间和我从数据库获取的时间。我在java.sql.Time格式(16:12:00)中从Java类的数据库中获取时间。比较数据库时间和当前时间
如果当前时间与数据库中存在的时间匹配,我只需要显示一条错误消息。
在处理日期和时间时,可以使用诸如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类,鉴于西方日历如何划分,数学方式更复杂 年。
与来自数据库,你可以简单地构建从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的答案,这可能是更有效的解决方案。
我不明白,你是从数据库获得一个字符串,你需要转换它,或者你得到一个java.sql.Time? – 2014-11-03 18:43:27
我得到java.sql.Time – 2014-11-03 18:44:20