我想知道本周的第一个星期一和本周的第一个周五的日期。
我试过这种方式:
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日
有人知道为什么我的月份为零吗?
答案 0 :(得分:2)
get
和set
的字段编号,表示月份。这是特定于日历的值。格列高利历和朱利安历的一年中的第一个月是JANUARY
,即0;最后一个取决于一年中的月数。
因此,第一个月(1月)的MONTH
值为0
,而不是1
(正如您所期望的那样)。
但是有一个更好的解决方案:使用DateFormat
或SimpleDateFormat
将日期格式化为文本。这样,您只需不必担心,让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的。