繁体   English   中英

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

[英]Android Calendar: first and last day of week -> zero month

我想获取当前一周的第一个星期一的日期和当前一周的第一个星期五的日期。

我这样尝试过:

    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-24.0.2014

正确的是20.1.2014-24.1.2014

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

从JavaDocs

getset字段号指示月份。 这是日历特定的值。 今年的阳历和罗马儒略历的第一个月是JANUARY是0; 最后一个取决于一年中的月份数。

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

不过,还有一个更好的解决方案:使用DateFormatSimpleDateFormat将日期设置为文本格式。 这样,您就不必担心此问题,而让DateFormat来处理它。 例如:

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

如中所述

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

如果使用此方法,则一月将为0,十月号将为11,因此您应在月份中加1。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM