日历功能

时间:2016-10-26 11:33:49

标签: java

输入日期为2016-01-01,但为什么输出会显示2016/02/01

String df = "2016-01-01";
String enddate="";
SimpleDateFormat DATE_FORMAT_QUERY = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");

Calendar cal=Calendar.getInstance();
String[] dateStr=df.split("-"); 
int year=Integer.parseInt(dateStr[0]);
int month=Integer.parseInt(dateStr[1]);
int day=Integer.parseInt(dateStr[2]);
cal.set(year,month,day,23, 59,59);
System.out.println(cal.getTime());
enddate=DATE_FORMAT_QUERY.format(cal.getTime());
System.out.println(enddate);

输出:

Mon Feb 01 23:59:59 EST 2016 20160201T235959Z

1 个答案:

答案 0 :(得分:2)

回答您的问题

  

输入日期是2016-01-01,但为什么输出显示2016/02/01?

因为Calendar::month从0开始。

  

month - 用于设置MONTH日历字段的值。 月值基于0。例如,0表示1月。

你应该使用

int month=Integer.parseInt(dateStr[1] - 1);

正确的解决方案

从不手动解析包含String的{​​{1}},更好地与Date获取日期并使用它来设置SimpleDateFormat时间:

Calendar

<强>输出:

SimpleDateFormat dfo = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.setTime(dfo.parse("2016-01-01"));