好吧,所以这个难倒我。我有以下代码尝试创建此字符串:
输出:52. 2012(12 月 24 日至 12 月 30 日)
这是 2012 年第 52 周的开始和结束,星期一是一周的第一天。
private Date getDateObject() {
Calendar cld = Calendar.getInstance();
cld.set(Calendar.YEAR, year);
cld.set(Calendar.WEEK_OF_YEAR, week);
cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cld.getTime();
}
private Date getEndDateObject() {
Calendar cld = Calendar.getInstance();
if (week < 52) {
cld.set(Calendar.YEAR, year);
cld.set(Calendar.WEEK_OF_YEAR, week + 1);
} else {
cld.set(Calendar.YEAR, year + 1);
cld.set(Calendar.WEEK_OF_YEAR, 1);
}
cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return cld.getTime();
}
public String getDateRangeString() {
String pattern = "d MMM";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date startDate = getDateObject();
Date endDate = getEndDateObject();
String startDateFormatted = formatter.format(startDate);
String endDateFormatted = formatter.format(endDate);
String dateString = "" + this.week + ". " + this.year + " (" + startDateFormatted + " to " + endDateFormatted + ")";
return dateString;
}
当在 YEAR = 2012 和 WEEK = 52 的对象上使用函数 getDateRangeString 时,会在以下设备上提供以下输出:
- 连结 S - 4.1
- 模拟器 4.1
- 模拟器 4.2
输出:52. 2012(12 月 24 日至 12 月 30 日)
哪个是对的!
但是在运行 4.2.1 的 Nexus 7 上,我得到:
输出:52. 2012(12 月 24 日至 1 月 6 日)
哇!!!!!
所有设备都设置为澳大利亚东部标准时间 +10,并且现在具有正确的时间/日期。我认为这与 4.2 中缺少的 12 月没有任何关系,无论如何应该在 4.2.1 中修复。
当我调试它时,日历说它具有所有正确的值。然后1月6日出来?
我的意思是它很奇怪,因为 12 月 31 日就像是第 53 周或其他什么?我不知道,我只是不明白为什么这个设备有任何不同。