以简单日期格式解析月份的问题

时间:2013-07-01 19:45:02

标签: java date date-format simpledateformat

我得到像String val = "2012-08-01T12:00"这样的值的字符串,并且我使用以下代码从中创建日历类型,问题是当我打印07月而不是08的数据时,如何解决它得到确切的月份?

  

1-7-2012-12-0-0

    SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
                    Date date = null;               
                    date = parserSDF.parse(Val);
                    Calendar cal = Calendar.getInstance();
                cal.setTime(date);

System.out.println(cal.get(Calendar.DAY_OF_MONTH) + "-" + cal.get(Calendar.MONTH) + "-"
                        + cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.HOUR_OF_DAY) + "-" + cal.get(Calendar.MINUTE)
                        + "-" + cal.get(Calendar.SECOND));

4 个答案:

答案 0 :(得分:5)

你的问题在这里:

cal.get(Calendar.MONTH)

1月= 0( 1),2月= 1(不是2 )等

答案 1 :(得分:1)

month基于0,所以你得到的就好了。

答案 2 :(得分:1)

只需添加一个。

Calendar returns the month in the range 0-11,因此添加1会将其转换为我们熟悉的1-12范围。

引用上面链接的javadoc:

  

格里高利和朱利安日历中的第一个月是   1月份是0

答案 3 :(得分:1)

日历中的月份为零索引。如果您想获得一个索引月份,则需要使用格式为SimpleDateFormat其他 MM

因此,您可以使用

代替奇怪的String连接
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss");
System.out.println(formatter.format(cal));