为什么calendar.get(Calendar.MONTH)上个月返回月份而不是当前月份?

时间:2015-07-15 21:06:39

标签: java date calendar

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
String data = calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + " " + calendar.get(Calendar.DAY_OF_MONTH) + "-"
        + calendar.get(Calendar.MONTH) + "-"
        + calendar.get(Calendar.YEAR);
System.out.println(data);

nad print:23:3 15-6-2015但今天是2015年7月15日至23日 月份是先前的,如何将23:3更改为23:03?

1 个答案:

答案 0 :(得分:1)

这完全不直观且令人讨厌,但这就是API的设计方式;当你要求一个月时返回的值是零基础的;你必须添加一个来获得真实的"月份数。

查看Calendar.MONTH字段的文档:

  

get和set的字段编号,表示月份。这是特定于日历的值。格里高利和朱利安日历中一年中的第一个月是JANUARY ,其为0 ;最后一个取决于一年中的月数。 (强调我的)

此外,不是手动构建字符串,而是使用像SimpleDateFormat这样的东西要容易得多;那时你不会遇到这个问题,你也可以打印出23:03的时间:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd-MM-yyyy");
sdf.setTimeZone(calendar.getTimeZone());
System.out.println(dateFormat.format(calendar.getTime()));