今天是2013-02-25,但为什么这段代码会返回2013-03-25?
String currentDate = new SimpleDateFormat("yyyy MM dd hh mm ss").format(new java.util.Date());
System.out.println("current Date "+currentDate);
StringTokenizer token = new StringTokenizer(currentDate);
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(token.nextToken()),
Integer.parseInt(token.nextToken()),
Integer.parseInt(token.nextToken()),
Integer.parseInt(token.nextToken()),
Integer.parseInt(token.nextToken()),
Integer.parseInt(token.nextToken()));
String calenderDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cal.getTime());
System.out.println("calender date "+calenderDate);
cal.add(Calendar.MONTH, -1); // set to one month ago
String pastDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cal.getTime());
System.out.println("past Date "+pastDate);
out put
当前日期2013 02 25 04 56 26
日历日期2013-03-25 04:56:26
过去日期2013-02-25 04:56:26
答案 0 :(得分:5)
减去一个月。所以它适用于API。即:
month - 用于设置MONTH日历字段的值。月值基于0。例如,1月份为0。
答案 1 :(得分:3)
答案 2 :(得分:3)
日历月份从0开始,请参阅JavaDoc:
@param month用于设置
MONTH
日历字段的值。 *月值基于0。例如,1月份为0。
这是一个皇家PITA,而且大多数Java开发人员在这个问题上都失去了一些时间,这肯定违反了最不惊讶的原则。使用Calendar类时要非常小心......还有像Joda那样的替代品。