Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取一个月内指定星期日的星期日列表_Java_Date_Calendar_Timestamp - Fatal编程技术网

Java 获取一个月内指定星期日的星期日列表

Java 获取一个月内指定星期日的星期日列表,java,date,calendar,timestamp,Java,Date,Calendar,Timestamp,我需要准备一份工作日日期的清单 注意:-星期日不是星期六或星期日(我可以将星期日作为参数传递) 我已经编写了以下代码,但不起作用, 你能把代码改一下吗 public static void main (String[] args) { List weekoffDates = new ArrayList<Timestamp>(); Timestamp date = "2013-12-01 00:00:00.0"; //This is timestamp object not

我需要准备一份工作日日期的清单

注意:-星期日不是星期六或星期日(我可以将星期日作为参数传递)

我已经编写了以下代码,但不起作用, 你能把代码改一下吗

public static void main (String[] args) {

  List weekoffDates = new ArrayList<Timestamp>();
  Timestamp date = "2013-12-01 00:00:00.0"; //This is timestamp object not string
  Timestamp endDate = "2013-12-31 00:00:00.0"; //This is timestamp object not string
  int dayOfWeek  = 3 //TuesDay

  for ( int i =1 ; i<=5; i++ ) {
    if( ! date.after(endDate) ) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(date.getTime());
        calendar.set( Calendar.DAY_OF_WEEK, dayOfWeek  );  //This is my parameter
        //calendar.set( Calendar.WEEK_OF_MONTH, i );        
        date = new Timestamp( calendar.getTimeInMillis() );
        weekoffDates.add(date); 
        dayOfWeek = dayOfWeek +7;
        System.out.println(date);
    }
    System.out.println(weekoffDates);  
  }
}
publicstaticvoidmain(字符串[]args){
List weekoffDates=new ArrayList();
Timestamp date=“2013-12-01 00:00:00.0”;//这是时间戳对象,不是字符串
Timestamp endDate=“2013-12-31 00:00:00.0”;//这是时间戳对象,不是字符串
int dayOfWeek=3//星期二

对于(int i=1;i,您必须在开始日期和结束日期之间进行迭代。在迭代循环中,您可以检查需要存储的日期,然后将其存储在列表中

下面是一个粗略的工作示例,您可以根据您的最佳实践或您可能希望使用的不同数据类型对其进行修改:

public static void main(String[] args) {
        List<String> workDays = new ArrayList<String>();
        int dayOfWeek  = 3; //TuesDay

        Calendar startDate = Calendar.getInstance();
        Calendar endDate = Calendar.getInstance();

        startDate.set(2013, 11, 1);
        endDate.set(2013, 11, 31);

        while (startDate.getTimeInMillis() <= endDate.getTimeInMillis()) {
            if (startDate.get(Calendar.DAY_OF_WEEK) == dayOfWeek) {
                workDays.add(startDate.getTime().toString());
                System.out.println(startDate.getTime());
            }
            startDate.add(Calendar.DAY_OF_MONTH, 1);
        }


    }
publicstaticvoidmain(字符串[]args){
列表工作日=新建ArrayList();
int dayOfWeek=3;//星期二
Calendar startDate=Calendar.getInstance();
Calendar endDate=Calendar.getInstance();
起始日期(2013年11月1日);
截止日期(2013年11月31日);
while(startDate.getTimeInMillis()我已经更新了上面(我在问题中提到过)的代码,如下所示。
这个代码片段也给出了正确的结果。(这里不需要迭代一个月的所有日期)

publicstaticvoidmain(字符串[]args){
List weekoffDates=new ArrayList();
Timestamp fromDate=getTimestamp(2013,12,1);
Timestamp endDate=getTimestamp(2013,12,31);
int dayOfWeek=4;//星期三
int maxWeeksInAMonth=5;
时间戳tempDate=fromDate;
对于(int i=1;ijava.time)
现代方法使用java.time类,而不是麻烦的遗留类,如
Date
&
Calendar

您似乎要求在特定月份内的一周中的同一天提供一系列日期。因此,您不必重复所有单独的日期,因为我们知道它们正好相隔七天。您只需找到第一个日期和所需的一周中的某一天,然后一次添加一周

该类表示一个仅限日期的值,不包含一天中的时间和时区

DayOfWeek dow = DayOfWeek.WEDNESDAY ;
YearMonth ym = YearMonth.of( 2013 , Month.DECEMBER ) ;

LocalDate firstOfMonth = ym.atDay( 1 );
LocalDate firstDowOfMonth = firstOfMonth.with( TemporalAdjusters.nextOrSame( dow ) ) ;

List< LocalDate > dates = new ArrayList<>( 5 );   // A month has a maximum of five occurrences of a day-of-week.
LocalDate ld = firstDowOfMonth ;
do {
    dates.add( ld ) ;
    // Set up the next loop.
    ld = ld.plusWeeks( 1 );
} while ( YearMonth.from( ld ).equals( ym ) ) ;  // Continue while in the desired month.
DayOfWeek道琼斯指数=DayOfWeek.周三;
YearMonth ym=年月日(2013年12月);
LocalDate firstOfMonth=ym.atDay(1);
LocalDate firstDowOfMonth=具有(TemporalAdjusters.nextOrSame(dow))的firstOfMonth;
Listdates=newarraylist(5);//一个月的一周中最多有五天出现。
LocalDate ld=每月第一个工作日;
做{
添加日期(ld);
//设置下一个循环。
ld=ld.plusWeeks(1);
}while(YearMonth.from(ld).equals(ym));//在所需月份继续。

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

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

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如、、。

否,它没有给出预期的结果,例如2013年12月1日,因为日期和结束日期是2013年12月31日,星期二是休息日请pOST是一个简短而完整的程序,演示了这个问题,以及预期和实际结果。我也强烈建议您考虑使用JoDA时间作为一个更好的日期/时间API。谢谢乔恩,我认为这是非常简单的要求,我可以用java日历和时间戳实现。我肯定会用我以前的C更新这个问题。ommentFYI,诸如和
java.text.SimpleTextFormat
等令人烦恼的旧日期时间类现在已被这些类取代。请参阅。
DayOfWeek dow = DayOfWeek.WEDNESDAY ;
YearMonth ym = YearMonth.of( 2013 , Month.DECEMBER ) ;

LocalDate firstOfMonth = ym.atDay( 1 );
LocalDate firstDowOfMonth = firstOfMonth.with( TemporalAdjusters.nextOrSame( dow ) ) ;

List< LocalDate > dates = new ArrayList<>( 5 );   // A month has a maximum of five occurrences of a day-of-week.
LocalDate ld = firstDowOfMonth ;
do {
    dates.add( ld ) ;
    // Set up the next loop.
    ld = ld.plusWeeks( 1 );
} while ( YearMonth.from( ld ).equals( ym ) ) ;  // Continue while in the desired month.