2

我得到了类似值的字符串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

4 回答 4

5

你的问题在这里:

cal.get(Calendar.MONTH)

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

于 2013-07-01T19:46:20.873 回答
1

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

于 2013-07-01T19:46:10.397 回答
1

加一个就行了。

Calendar 返回 0-11 范围内的月份,因此添加1会将其转换为我们都熟悉的 1-12 范围。

引用上面链接的javadocs:

公历和儒略历中的第一个月是 JANUARY,即 0

于 2013-07-01T19:46:16.363 回答
1

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

所以,而不是你奇怪的String串联,你会使用

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss");
System.out.println(formatter.format(cal));
于 2013-07-01T19:46:30.637 回答