我试图从这些参数中返回日期列表:
LocalDate startDate
LocalDate endDate
Boolean monday ... sunday : booleans
例如:
startDate = 01/03/2016
endDate = 10/03/2016 (included)
Monday = true;
Tuesday = false;
Wednesday = false;
Thursday = true;
Friday = true;
Saturday = false;
Sunday = false;
List of dates returned : [03/03/2016, 04/03/2016, 07/03/2016, 10/03/2016]
我可以使用任何图书吗?我只设法返回两个日期之间的日期,但我也不知道如何使用这些日子:(我使用java 6)
public List<LocalDate> datesBetween(LocalDate start, LocalDate end) {
List<LocalDate> ret = new ArrayList<LocalDate>();
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
ret.add(date);
}
return ret;
}
答案 0 :(得分:0)
清单1
使用标准Java getter约定来从Java SE 8类中获取值,如清单2所示。
LocalDate theDate = timePoint.toLocalDate();
Month month = timePoint.getMonth();
int day = timePoint.getDayOfMonth();
timePoint.getSecond();
答案 1 :(得分:0)
问题是你方法的签名。日期作为名称传递的事实使得很难做任何通用的事情;这意味着您将需要大量代码来解决问题。您可能需要考虑传入大小为7的数组,或者对应于“true”的日期名称列表(省略其他名称)。
如果要传入一组0到6之间的整数,如果它在集合中,则编码一周中的某一天是活动的,您可以迭代您的时间范围并检查该日期是否已经过去是否活跃。您可以使用date.getDayOfWeek()
和set.contains()
等方法。
答案 2 :(得分:0)
避免使用与最早版本的Java捆绑在一起的旧日期时间类,例如java.util.Date/.Calendar。它们的设计很糟糕,令人困惑,也很麻烦。
Java 8及更高版本中内置的java.time框架取代了旧的日期时间类。见Tutorial。
用于Java 6&amp; 7,查看ThreeTen-Backport项目('ThreeTen'指的是定义java.time的JSR 310)。对于Android,请参阅Backport附近的Android包装器ThreeTenABP。
新类包含LocalDate
,仅适用于没有时间且没有时区的仅限日期的值。您需要的另一个方便的课程是enum DayOfWeek
。 使用这些对象而不是字符串,使您的代码安全,自我记录和本地化就绪。
提醒:Java为枚举EnumSet
和EnumMap
提供了特殊的高性能Set
和Map
实现。
EnumSet<DayOfWeek> dayOfWeekSet = EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.THURSDAY );
定义日期间隔。
LocalDate start = LocalDate.of( 2016 , Month.MARCH , 1 );
LocalDate stop = start.plusDays( 10 );
定义一个集合以保持我们的目标日期。
List<LocalDate> localDates = new ArrayList<>();
循环该间隔的日子。在日期时间工作中,我们通常使用半开放式方法,其中包含的开头,而结尾是独占。
LocalDate localDate = start;
while ( localDate.isBefore( stop ) ) {
if ( dayOfWeekSet.contains ( localDate.getDayOfWeek() ) ) {
localDates.add( localDate );
}
// Prepare for next loop.
localDate = localDate.plusDays( 1 );
}
转储到控制台。
System.out.println( "From: " + start + " to: " + stop + " the dates for days-of-week: " + dayOfWeekSet + " = " + localDates );
从:2016-03-01至:2016-03-11星期几的日期:[星期二,星期四] = [2016-03-01,2016-03-03,2016-03-08 ,2016-03-10]
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。