我正在使用当前时间的Timestamp
课程来设置时间。我的Calendar
课程的时间先是DAY_OF_WEEK
,第二是DAY_OF_MONTH
。我每次都得到相同的输出。那么DAY_OF_MONTH
和DAY_OF_WEEK
之间的差异是什么?
Timestamp followUpDateBegins = new Timestamp(System.currentTimeMillis());
Calendar cal = Calendar.getInstance();
cal.setTime(followUpDateBegins);
cal.add(Calendar.DAY_OF_WEEK, -30);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
followUpDateBegins.setTime(cal.getTime().getTime());
System.out.println("followUpDateBegins "+followUpDateBegins);
OR
Timestamp followUpDateBeginsSecond = new Timestamp(System.currentTimeMillis());
cal.setTime(followUpDateBeginsSecond);
cal.add(Calendar.DAY_OF_MONTH, -30);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
followUpDateBeginsSecond.setTime(cal.getTime().getTime());
System.out.println("followUpDateBegins" + followUpDateBeginsSecond);
答案 0 :(得分:3)
如果您使用add
cal.add(Calendar.DAY_OF_WEEK, -30);
与cal.add(Calendar.DAY_OF_MONTH, -30);
DATE和DAY_OF_YEAR的行为也是一样的 - 因为你在两种情况下修改了天数而你只是落后了30天。
但是如果您的日历设置为4月15日,那么您可以这样做
cal.get(Calendar.DAY_OF_MONTH)
和cal.get(Calendar.DAY_OF_WEEK)
他们会返回不同的结果。
答案 1 :(得分:2)
DAY_OF_WEEK是星期几(7天),DAY_OF_MONTH是月中的某天(< = 31天)
答案 2 :(得分:0)
正如其他答案中所解释的那样,添加两个字段会产生相同的日期,这是一个奇怪的实现细节,IMO。我们可以看到from the source code,有一个switch
语句,其中两个字段在添加时被视为“相同”:
case DAY_OF_MONTH: // synonym of DATE
case DAY_OF_YEAR:
case DAY_OF_WEEK:
Alghough没有意义“添加星期几”(恕我直言 - 因为最后你只需添加天,无论是在同一周,一个月或其他什么地方,那都是它,这就是它实施的方式。这个API真的令人困惑......
另一个细节是,Calendar.getInstance()
已经返回当前日期/时间 - it internally calls System.currentTimeMillis()
,因此创建Timestamp
只是为了在日历中设置它是多余的。你可以这么做:
// create the calendar
Calendar cal = Calendar.getInstance();
// do your stuff
...
// create the timestamp
Timestamp followUpDateBeginsSecond = new Timestamp(cal.getTimeInMillis());