返回一个日期列表,给出一个日期和星期几的间隔作为布尔值

时间:2016-03-10 17:36:55

标签: java date datetime

我试图从这些参数中返回日期列表:

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;
}

3 个答案:

答案 0 :(得分:0)

Java SE 8 Date and Time

  

清单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.time

Java 8及更高版本中内置的java.time框架取代了旧的日期时间类。见Tutorial

用于Java 6&amp; 7,查看ThreeTen-Backport项目('ThreeTen'指的是定义java.time的JSR 310)。对于Android,请参阅Backport附近的Android包装器ThreeTenABP

新类包含​​LocalDate,仅适用于没有时间且没有时区的仅限日期的值。您需要的另一个方便的课程是enum DayOfWeek使用这些对象而不是字符串,使您的代码安全,自我记录和本地化就绪。

提醒:Java为枚举EnumSetEnumMap提供了特殊的高性能SetMap实现。

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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance 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的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore