Java Joda Time:如何在某个日期间隔内获取工作日的日期?

Java Joda Time:如何在某个日期间隔内获取工作日的日期?,java,datetime,date,jodatime,Java,Datetime,Date,Jodatime,我有两个LocalDate,它们代表某个时间间隔。现在我必须得到所有星期五的本地日期,这个时间间隔包含这些日期。 最简单的方法?包org.life.java.so.questions; package org.life.java.so.questions; import org.joda.time.DateTime; import org.joda.time.DateTimeConstants; /** * * @author Jigar */ public class JodaTim

我有两个LocalDate,它们代表某个时间间隔。现在我必须得到所有星期五的本地日期,这个时间间隔包含这些日期。 最简单的方法?

包org.life.java.so.questions;
package org.life.java.so.questions;

import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;

/**
 *
 * @author Jigar
 */
public class JodaTimeDateTraverseQuestion {
    public static void main(String[] args) {

        DateTime startDt = new DateTime(2010,12,1,0,0,0,0);//1st Dec 2010
        DateTime endDt = new DateTime(2010,12,31,0,0,0,0);//31st Dec 2010
        DateTime tempDate = new DateTime(startDt.getMillis());
        while(tempDate.compareTo(endDt) <=0 ){
            if(tempDate.getDayOfWeek() !=  DateTimeConstants.SATURDAY && tempDate.getDayOfWeek() !=  DateTimeConstants.SUNDAY){
                System.out.println(""+tempDate);
            }
            tempDate = tempDate.plusDays(1);

        }


    }
}
导入org.joda.time.DateTime; 导入org.joda.time.DateTimeConstants; /** * *@作者Jigar */ 公共类JodaTimeDateTraverseQuestion{ 公共静态void main(字符串[]args){ DateTime startDt=新的日期时间(2010,12,1,0,0,0);//2010年12月1日 DateTime endDt=新日期时间(2010,12,31,0,0,0);//2010年12月31日 DateTime tempDate=newdatetime(startDt.getMillis());
while(tempDate.compareTo(endDt)解决方案:懒洋洋地一步一周

import org.joda.time.LocalDate;
import java.util.Iterator;

public class DayOfWeekIterator implements Iterator<LocalDate>{
    private final LocalDate end;
    private LocalDate nextDate;

    public DayOfWeekIterator(LocalDate start, LocalDate end, int dayOfWeekToIterate){
        this.end = end;
        nextDate = start.withDayOfWeek(dayOfWeekToIterate);
        if (start.getDayOfWeek() > dayOfWeekToIterate) {
            nextDate = nextDate.plusWeeks(1);
        }
    }

    public boolean hasNext() {
        return !nextDate.isAfter(end);
    }

    public LocalDate next() {
        LocalDate result = nextDate;
        nextDate = nextDate.plusWeeks(1);
        return result;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
 }
太长,读不下去了 java.time 仅供参考,该项目目前正在进行中,团队建议迁移到类

定义停止和启动
LocalDate
对象

LocalDate start = LocalDate.of( 2018 , Month.JANUARY , 23 );
LocalDate stop = LocalDate.of( 2018 , Month.FEBRUARY , 27 );
// TODO: Verify start.isBefore( stop ).
收集我们找到的星期五日期。您可以通过调整集合大小来进行一些优化

// Pre-size the collection.
int initialCapacity = ( int ) ( ChronoUnit.WEEKS.between( start , stop ) + 2 ); // Adding two for good measure.
List < LocalDate > fridays = new ArrayList <>( initialCapacity );
从2018-01-23到2018-02-27=[2018-01-262018-02-022018-02-092018-02-162018-02-23]


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
classes

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在此处找到一些有用的类,如、、。

FYI,该项目现在正在进行中,团队建议迁移到这些类。请参阅。
LocalDate start = LocalDate.of( 2018 , Month.JANUARY , 23 );
LocalDate stop = LocalDate.of( 2018 , Month.FEBRUARY , 27 );
// TODO: Verify start.isBefore( stop ).
// Pre-size the collection.
int initialCapacity = ( int ) ( ChronoUnit.WEEKS.between( start , stop ) + 2 ); // Adding two for good measure.
List < LocalDate > fridays = new ArrayList <>( initialCapacity );
LocalDate friday = start.with( TemporalAdjusters.nextOrSame( DayOfWeek.FRIDAY ) );

while ( friday.isBefore( stop ) )
{
    fridays.add( friday );  // Remember this Friday date.
    // Setup next loop.
    friday = friday.with( TemporalAdjusters.next( DayOfWeek.FRIDAY ) );
}

System.out.println( "From " + start + " to " + stop + " = " + fridays );