如何将Date类与java中的System.currentTimeMillis()进行比较

时间:2013-12-09 17:47:47

标签: java date time

如何比较像“2013-12-09 00:00:00”这样的对象日期是否大于java中的实际时间(System.currentTimeMillis())?

if (object.getDate().getSeconds() > System.currentTimeMillis())
  //do something

4 个答案:

答案 0 :(得分:3)

您可以使用if (object.getDate().after(Calendar.getInstance().getTime()) {

答案 1 :(得分:3)

getTime()对象中调用getSeconds()而不是Date

答案 2 :(得分:1)

getSeconds不会返回自纪元以来的秒数。它返回Date实例的秒数。

所以我想你需要的是:

if (object.getDate().getTime() > System.currentTimeMillis())

答案 3 :(得分:1)

你应该依赖一个好的日期时间库,而不是用系统毫秒来做你自己的数学运算。

现在在Java中(2013年),这意味着Joda-Time 2.3。在Java 8中,考虑从JSR 310迁移到新的java.time。*类。这些类的灵感来自Joda-Time,但完全重新构建。

Joda-Time提供方法isBeforeisAfter,正是您需要的比较。

您的问题无法解决时区问题。因此,对于我下面的示例代码,我假设您的给定日期时间是UTC / GMT。如果不是这种情况,请通过将对withZoneUTC()的调用更改为另一种withZone方法来调整代码。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern( "yyyy-MM-dd' 'HH:mm:ss" );

DateTime dateTimeInUTC = formatter.withZoneUTC().parseDateTime( "2013-12-09 00:00:00" );
DateTime now = new DateTime();
Boolean isFuture = ( dateTimeInUTC.isAfter( now ) );

System.out.println( "dateTimeInUTC: " + dateTimeInUTC );
System.out.println( "now: " + now );
System.out.println( "now in UTC: " + now.toDateTime( DateTimeZone.UTC ) );
System.out.println( "isFuture: " + isFuture );

跑步时......

dateTimeInUTC: 2013-12-09T00:00:00.000Z
now: 2013-12-09T23:46:05.902-08:00
now in UTC: 2013-12-10T07:46:05.902Z
isFuture: false