Android日历:一周的第一天和最后一天 - >零月

时间:2014-01-26 22:56:25

标签: java android

我想知道本周的第一个星期一和本周的第一个周五的日期。

我试过这种方式:

    Calendar calendarFirstDay = Calendar.getInstance(Locale.GERMANY);
    Calendar calendarLastDay = Calendar.getInstance(Locale.GERMANY);
    Date now = new Date();

    calendarFirstDay.setTime(now);
    calendarLastDay.setTime(now);
    calendarFirstDay.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    calendarLastDay.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

    MyTextView.setText(calendarFirstDay.get(Calendar.DATE) + "." + calendarFirstDay.get(Calendar.MONTH) + "." + calendarFirstDay.get(Calendar.YEAR) + " - "  + calendarLastDay.get(Calendar.DATE) + "." + calendarLastDay.get(Calendar.MONTH) + "." + calendarLastDay.get(Calendar.YEAR));

如果我今天(2014年1月26日星期日)尝试这个脚本,输出如下:

  

20.0.2014 - 2014年6月24日

正确将是2014年1月20日 - 2014年1月24日

有人知道为什么我的月份为零吗?

2 个答案:

答案 0 :(得分:2)

From the JavaDocs

  

getset的字段编号,表示月份。这是特定于日历的值。格列高利历和朱利安历的一年中的第一个月是JANUARY,即0;最后一个取决于一年中的月数。

因此,第一个月(1月)的MONTH值为0,而不是1(正如您所期望的那样)。

但是有一个更好的解决方案:使用DateFormatSimpleDateFormat将日期格式化为文本。这样,您只需不必担心,让DateFormat处理它。例如:

DateFormat myFormat = new SimpleDateFormat("dd.MM.yyyy");
MyTextView.setText(
    myFormat.format(calendarFirstDay.getTime()) + " - " +
    myFormat.format(calendarLastDay.getTime())
);

答案 1 :(得分:0)

所述

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int,%20int,%20int)

如果你使用这种方法,1月将为0,而成员将为11,所以你应该在你的月份加1。

编辑:您使用的是get方法,但它也可能是基于0的。