我正在编写一个我需要处理日期的程序。我收到输入日期,即一周的开始日期(星期一)。在这种情况下,它是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
我能做什么,接收我需要的输出?
答案 0 :(得分:1)
您正在为每个变量分配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
答案 1 :(得分:1)
Java 8提供了一个新的时间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);
答案 2 :(得分:0)
Calendar cStart
是日历对象的引用,因此当您执行cMon = cStart;
时,您将复制对同一对象的引用。当你不断修改唯一的Calendar对象时,所有的引用都指向同一个东西。
您可以使用clone()
获取对象本身的副本。
答案 3 :(得分:0)
因此,您可以使用其他答案中提到的clone()
来复制每个工作日变量的Calendar
实例。
或您使用旨在存储日期的Date
类,Calendar
用于计算日期。
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);
[...]
答案 4 :(得分:0)
Calendar cStart = Calendar.getInstance();
System.out.println(cStart.getTime());
for(int i=0;i<6;i++){
cStart.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(cStart.getTime());
}