在Java中向日历添加多天

在Java中向日历添加多天,java,calendar,Java,Calendar,我正在写一个程序,其中我需要处理日期。我收到一个输入日期,它是一周的开始日(星期一)。在这种情况下,是2015年1月5日星期一00:00:00 CET。 然后我需要定义一周中其他几天的日期 我试着这样做: Calendar cStart = Calendar.getInstance(); Calendar cMon = Calendar.getInstance(); Calendar cTue = Calendar.getInstance();

我正在写一个程序,其中我需要处理日期。我收到一个输入日期,它是一周的开始日(星期一)。在这种情况下,是2015年1月5日星期一00:00:00 CET。 然后我需要定义一周中其他几天的日期

我试着这样做:

Calendar cStart = Calendar.getInstance();   

     Calendar cMon = Calendar.getInstance();
                Calendar cTue = Calendar.getInstance();
                Calendar cWed = Calendar.getInstance();
                Calendar cThu = Calendar.getInstance();
                Calendar cFri = Calendar.getInstance();
                Calendar cSat = Calendar.getInstance();
                Calendar cSun = Calendar.getInstance();

                cMon = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cTue = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cWed = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cThu = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cFri = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cSat = cStart;
                cStart.add(Calendar.DAY_OF_MONTH, 1);
                cSun = cStart;

                System.out.println(cMon.getTime());
                System.out.println(cTue.getTime());
                System.out.println(cWed.getTime());
                System.out.println(cThu.getTime());
                System.out.println(cFri.getTime());
                System.out.println(cSat.getTime());
                System.out.println(cSun.getTime());
现在我的问题是,输出应该如下所示:

Mon Jan 05 00:00:00 CET 2015
Tue Jan 06 00:00:00 CET 2015
Wed Jan 07 00:00:00 CET 2015
Thu Jan 08 00:00:00 CET 2015
Fri Jan 09 00:00:00 CET 2015
Sat Jan 10 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
但实际上是这样的:

Mon Jan 05 00:00:00 CET 2015
Tue Jan 06 00:00:00 CET 2015
Wed Jan 07 00:00:00 CET 2015
Thu Jan 08 00:00:00 CET 2015
Fri Jan 09 00:00:00 CET 2015
Sat Jan 10 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015
Sun Jan 11 00:00:00 CET 2015

要接收所需的输出,我能做些什么?

您正在为每个变量分配
cStart
的引用。使用
clone()
方法每次获取一个新对象

Calendar cStart = Calendar.getInstance();

Calendar cMon = null;
Calendar cTue = null;
Calendar cWed = null;
Calendar cThu = null;
Calendar cFri = null;
Calendar cSat = null;
Calendar cSun = null;

cMon = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cTue = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cWed = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cThu = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cFri = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cSat = (Calendar) cStart.clone();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cSun = (Calendar) cStart.clone();

System.out.println(cMon.getTime());
System.out.println(cTue.getTime());
System.out.println(cWed.getTime());
System.out.println(cThu.getTime());
System.out.println(cFri.getTime());
System.out.println(cSat.getTime());
System.out.println(cSun.getTime());
输出

Mon Feb 22 12:45:39 CET 2016
Tue Feb 23 12:45:39 CET 2016
Wed Feb 24 12:45:39 CET 2016
Thu Feb 25 12:45:39 CET 2016
Fri Feb 26 12:45:39 CET 2016
Sat Feb 27 12:45:39 CET 2016
Sun Feb 28 12:45:39 CET 2016

Calendar cStart
是对日历对象的引用,因此当您执行
cMon=cStart您正在将引用复制到同一对象。当您不断修改唯一的日历对象时,所有引用都指向同一个对象

您可以使用
clone()
获取对象本身的副本。

因此,您可以使用其他答案中提到的
clone()
为每个工作日变量复制
日历
实例。
您使用设计用于存储日期的
日期
类,而
日历
设计用于计算日期

Calendar cStart = Calendar.getInstance();   

Date cMon = null;
Date cTue = null;
[...]

cMon = cStart.getTime();
cStart.add(Calendar.DAY_OF_MONTH, 1);
cTue = cStart.getTime();
cStart.add(Calendar.DAY_OF_MONTH, 1);
[...]

System.out.println(cMon);
System.out.println(cTue);
[...]
日历cStart=Calendar.getInstance(); System.out.println(cStart.getTime());
for(inti=0;iJava8提供了一个新的时间API。
你可以很好地解决你的问题

// There are various ways to set your start day
LocalDate start = LocalDate.now();

// Year - Month - Day
start = LocalDate.parse("2016-02-26");
start = LocalDate.of(2016,2,26);


LocalDate cMon = start.plusDays(1);
LocalDate cTue = start.plusDays(2);
LocalDate cWed = start.plusDays(3);
LocalDate cThu = start.plusDays(4);
LocalDate cFri = start.plusDays(5);
LocalDate cSat = start.plusDays(6);
LocalDate cSun = start.plusDays(7);

System.out.println(cMon);
System.out.println(cTue);
System.out.println(cWed);
System.out.println(cThu);
System.out.println(cFri);
System.out.println(cSat);
System.out.println(cSun);

只是一个小提示:
Calendar.getInstance()
始终返回相同的物理对象。因此,您使用的每个变量(
cMon
cTue
等)都指向完全相同的对象。请尝试使用
Calendar
的新实例。您可以保留相同的代码并添加System.out.println()语句每次将日期添加到CalendarClass
Calendar
时都不是一个单例。它的(名称混乱)
getInstance()
方法并不总是返回同一个实例;每次调用它时都会返回一个新实例。请尝试在代码中包含一些注释/解释,以帮助其他人理解。