如何从日期数组中减去一个日期?

时间:2014-01-05 23:17:29

标签: java arrays date time

所以,我从用户那里得到了一系列日期。我想通过查看已过去的天数来删除某些条目。只有一个日期这不会太糟糕但不幸的是我无法弄清楚如何使用日期数组来做这件事。我可能会忽略一些基本的东西,因为我是初学者。

int[] dates;
int time;
int long;
Date now = new Date();

time = (int) (new Date().getTime() / 1000L);
diff = dates - time;

最后一行代码显然不正确并给了我一个错误。我该怎么做才能纠正这个问题?

感谢你忍受一个noobie。

4 个答案:

答案 0 :(得分:1)

您必须遍历数组并检查每个条目。 Google for for循环就像为每个人做的那样。

我还建议不使用数组但使用list,只需调用.Remove(object)方法就可以删除无效条目。

答案 1 :(得分:1)

您需要遍历数组的元素,然后检查此数组中的每个Date。那些日期都可以(即通过检查),你可以添加到ArrayList。最后遍历ArrayList并按照您的意愿处理它们。

答案 2 :(得分:1)

其他答案都是正确的。

  • 您没有正确处理数组,因为您必须遍历数组。
  • 您没有正确处理Date对象,因为无法使用HYPHEN-MINUS“ - ”字符减去它们。

研究

我建议做更多的研究。 Oracle提供的免费Java Tutorials在线提供是一个很好的起点,Head First Java书也是如此。


集合

如果愿意,您可以在Java中使用基本数组,但Collections对象更有用。

约达时间

您可以使用java.util.Date&与Java捆绑在一起的Calendar类,但由于设计和实现不当,不推荐使用它们。 Joda-Time是一个常用的开源第三方库。

将来使用Java 8时,日期/日历类将被新的java.time.* classes取代。这些课程的灵感来自于Joda-Time,但是经过了重新设计。

无需经过

如果你只是想找到太旧的输入日期(或者说你没有说明哪些日期),那么你不需要计算经过的时间。相反,计算输入变得太旧的时刻的日期时间。然后比较每个输入,看看它是在那个时刻之前还是之后。

添加到新集合

另一个提示:只需将您想要的那些添加到 new 集合中,而不是删除您不想要的那些。使您的代码更易于理解,更易于调试。

标准格式

Joda-Time默认情况下使用标准ISO 8601格式将日期时间呈现为字符串。您可以在下面的控制台输出中看到这一点Joda-Time内置了许多其他格式,您也可以定义自己的格式。

示例代码

以下是一些示例代码,可帮助您实现目标。使用Joda-Time 2.3,在Java 7中运行。

// © 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.*;

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );

java.util.List<DateTime> dateTimesInput = new ArrayList<DateTime>();
dateTimesInput.add( new DateTime( 2001, 2, 3, 4, 5, 6, timeZone ) );
dateTimesInput.add( new DateTime( 2014, 1, 5, 7, 8, 9, timeZone ) );
dateTimesInput.add( new DateTime( timeZone ).minusDays( 2 ) );

// Calculate the moment of a month ago, in desired time zone. Include all of that moment’s day, so go back to first moment of the day.
DateTime monthAgo = new DateTime( timeZone ).minusMonths( 1 ).withTimeAtStartOfDay();

// Loop the dates input. If any are less than a month old, keep them.
java.util.List<DateTime> keepers = new ArrayList<DateTime>();
for(DateTime dateTime: dateTimesInput){
    if( dateTime.isBefore( monthAgo ) ){
        // Ignore this date-time.
    } else {
        keepers.add( dateTime );
    }
}

// Dump to console.
System.out.println( "Month ago: " + monthAgo );
for(DateTime dateTime: keepers){
    System.out.println( dateTime );
}

跑步时......

Month ago:2013-12-06T00:00:00.000+01:00
2014-01-05T07:08:09.000+01:00
2014-01-04T04:25:31.272+01:00

答案 3 :(得分:0)

试试这个:

Date now = new Date();

Date[] datesFromUser = new Date[10];
List<Date> newDatesList = new ArrayList<Date>();

for(Date d: datesFromUser){
    if(d.getTime() > now.getTime()){
        newDatesList.add(d);
    }
}

Date[] dates = new Date[newDatesList.size()];
int index = 0;
for(Date d: newDatesList){
    dates[index++] = d;
}