Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较数据库时间和当前时间_Java - Fatal编程技术网

Java 比较数据库时间和当前时间

Java 比较数据库时间和当前时间,java,Java,我需要将当前时间与从数据库中获取的时间进行比较。我从Java类的数据库中获取时间,格式为(16:12:00) 我只需要显示一个错误信息,如果当前的时间与DB中存在的时间相匹配。 < P>在处理日期和时间时,您可以使用许多像JoDA时间这样的库之一,或者您可以简单地将时间看作是自1/1/1970以来的给定毫秒(UNIX EPOCH),表示为正常长。p> 转换java.util.Date或java.sql.Time、Date等。。从java.util.Date扩展到一个简单的long,您可以调用ge

我需要将当前时间与从数据库中获取的时间进行比较。我从Java类的数据库中获取时间,格式为(16:12:00)


我只需要显示一个错误信息,如果当前的时间与DB中存在的时间相匹配。

< P>在处理日期和时间时,您可以使用许多像JoDA时间这样的库之一,或者您可以简单地将时间看作是自1/1/1970以来的给定毫秒(UNIX EPOCH),表示为正常长。p> 转换java.util.Date或java.sql.Time、Date等。。从java.util.Date扩展到一个简单的long,您可以调用getTime():

可以使用System.currentTimeMillis()获得当前时间,以毫秒表示,与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

如果您需要更复杂的比较,如日或月,您应该使用Joda Time之类的库或Calendar之类的内置类,因为西历是如何划分年份的,所以数学要复杂得多。

要将当前时间与数据库中的时间进行比较,只需从System.currentTimeMillis()中构造一个sql.time,然后将这两个时间与字符串()进行比较,如下所示:

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 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?我得到的是java.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