其他答案都是正确的。
- 您没有正确处理数组,因为您必须循环遍历数组。
- 您没有正确处理 Date 对象,因为无法使用 HYPHEN-MINUS “-” 字符减去它们。
学习
我建议做更多的研究。 Oracle 在线提供的免费 Java Tutorials 是一个很好的起点,Head First Java 书籍也是如此。
收藏
如果您愿意,可以在 Java 中使用基本数组,但 Collections 对象更有用。
乔达时间
您可以使用与 Java 捆绑在一起的 java.util.Date 和 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