我有一个android日历编程的问题,所以 如果一周有2个月,android会给我写一个旧月的名字。我希望他写一些像(旧月 - 新月)的东西。
我的代码如下
Calendar wek = Calendar.getInstance(Locale.US);
wek.add(Calendar.WEEK_OF_YEAR,r);
SimpleDateFormat gm = new SimpleDateFormat("MMM yyy");
mes.setText(gm.format(wek.getTime()));
答案 0 :(得分:0)
你认为正确的月份是多少?你要做的是在现在的确切时刻添加r
周。这是特定的时间点,并且与特定的毫秒相关联。这毫秒属于一个月或另一个月。并且您的代码返回的是哪个月。
答案 1 :(得分:0)
您应该获得一周中第一天的索引,以及最后一天的索引并检查它们所属的月份。
(我不是以英语为母语的人,但你可以说一个星期重叠两个月,一个星期超过两个月。)
答案 2 :(得分:0)
这样做的原因是,当查看一周所代表的日期时,它只会查看一周中的第一天。您需要手动检查一周的第一天和最后几天,如果它们在不同的月份,则手动格式化日期。您还需要注意与年份重叠的一周。像这样:
Calendar wek = Calendar.getInstance(Locale.US);
wek.add(Calendar.WEEK_OF_YEAR,r);
//this will set your calendar onto the first day of the week
int w = wek.get(Calendar.WEEK_OF_YEAR);
int y = wek.get(Calendar.YEAR);
wek.clear();
wek.set(Calendar.YEAR, y);
wek.set(Calendar.WEEK_OF_YEAR, w);
//get the month and year of the first day of the week
int m1 = wek1.get(Calendar.MONTH);
int y1 = wek1.get(Calendar.YEAR);
//get the date for the end of the week and its month and year
Calendar w2 = wek;
w2.add(Calendar.DATE, 6);
int m2 = w2.get(Calendar.MONTH);
int y2 = w2.get(Calendar.YEAR);
if(m1 == m2) {
//if the two months are the same, then just format the date
SimpleDateFormat gm = new SimpleDateFormat("MMM yyyy");
mes.setText(gm.format(wek.getTime()));
}
else if(y1 == y1) {
//different months, same year - format as "MMM - MMM yyyy"
SimpleDateFormat gm = new SimpleDateFormat("MMM");
SimpleDateFormat gy = new SimpleDateFormat("yyyy");
mes.setTextText(gm.format(wek.getTime()) + " - " +
gm.format(w2.getTime()) + " " +
gy.format(wek.getTime()));
}
else {
//Different months and different years - format as "MMM yyyy - MMM yyyy"
SimpleDateFormat gm = new SimpleDateFormat("MMM yyyy");
mes.setTextText(gm.format(wek.getTime()) + " - " +
gm.format(w2.getTime()));
}