我需要将当前时间与从数据库中获取的时间进行比较。我正在以java.sql.Time格式(16:12:00)从Java类中的数据库中获取时间。
如果当前时间与数据库中存在的时间匹配,我只需要显示错误消息。
答案 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的答案中的长时间,这可能是更有效的解决方案。