好的,所以這個問題困擾着我。 我有下面的代碼,它試圖創建此字符串:Android Java日曆Nexus 7上的WEEK_OF_YEAR問題4.2
OUTPUT:52 2012(12月24日至12月30日)
這是今年的第52周的開始和結束2012年,週一是本週的第一天。
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給出了以下設備的輸出如下:
- 歌Nexus S - 4.1
- 模擬器4.1
- 模擬器4.2
OUTPUT:52 2012(2 12月4日至12月30日)
這是正確的!
但在的Nexus 7運行4.2.1我得到:
OUTPUT:52 2012(12月24日至1月6日)
WTF!?!?
所有設備都設置爲澳大利亞EST +10,並且現在有正確的時間/日期。 我不認爲這與4.2中失蹤的12月份有什麼關係,無論如何應該在4.2.1中修正。
當我調試它時,日曆表示它具有所有正確的值。 然後出來1月6日?
我的意思是它是一個奇怪的一個因爲12月31日就像第53周或什麼? 我不知道,我只是不明白爲什麼這個設備有什麼不同。
日曆API非常混亂,我建議你使用喬達時間來代替。 – dd619
您的代碼目前有點令人困惑 - 我懷疑那裏存在微妙的隱患。目前尚不清楚爲什麼您不僅僅在開始日期添加6天(仍在「日曆」中,以避免DST問題)。您可以在工作和非工作設備上查看「Calendar.getMinimalDaysInFirstWeek」查看是否有所不同,以解釋不同的輸出。 –