Хорошо, так что это ставит меня в тупик. У меня есть следующий код, который пытается создать эту строку:
ВЫВОД: 52. 2012 г. (с 24 декабря по 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;
}
Функция getDateRangeString при использовании для объекта с YEAR = 2012 и WEEK = 52 дает следующие выходные данные на следующих устройствах:
- Нексус С – 4.1
- Эмулятор 4.1
- Эмулятор 4.2
ВЫВОД: 52. 2012 г. (с 24 декабря по 30 декабря)
Что правильно!
Но на Nexus 7 под управлением 4.2.1 я получаю:
ВЫВОД: 52. 2012 (24 декабря — 6 января)
ВТФ!!!?!?
Все устройства настроены на австралийский EST +10 и имеют правильное время / дату прямо сейчас. Я не думаю, что это имеет какое-то отношение к отсутствующему декабрьскому месяцу в 4.2, который в любом случае должен быть исправлен в 4.2.1.
Когда я отлаживаю его, календарь говорит, что у него все правильные значения. Тогда выходит 6 января?
Я имею в виду, что это странно, потому что 31 декабря похоже на 53-ю неделю или что-то в этом роде? Я не знаю, я просто не понимаю, почему это устройство чем-то отличается.
Calendar
, чтобы избежать проблем с летним временем). Вы можете посмотреть наCalendar.getMinimalDaysInFirstWeek
как на работающих, так и на нерабочих устройствах, чтобы увидеть, отличается ли это, чтобы объяснить разные выходные данные. - person Jon Skeet   schedule 18.01.2013