Итак, это 26 января 2015 года, и у меня есть следующий код, запущенный на устройстве Android;Это ошибка в Android GregorianCalendar?
GregorianCalendar date = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat();
// Set date to 4 weeks ago, and then use it for the first BETWEEN date in the above query
date.set(GregorianCalendar.WEEK_OF_YEAR, date.get(GregorianCalendar.WEEK_OF_YEAR)-4);
System.out.println(df.format(new Date(date.getTimeInMillis())));
// Set date to 2 weeks time, and then use it for the second BETWEEN date in the above query
date.set(GregorianCalendar.WEEK_OF_YEAR, date.get(GregorianCalendar.WEEK_OF_YEAR)+6);
System.out.println(df.format(new Date(date.getTimeInMillis())));
И я получаю выход;
29/12/14 10:29
09/02/14 10:29
Запуск этого фрагмента на стандартной Java на машине Windows, показывает правильные результаты со второй датой как 09/02/15 10:29
. Таким образом, на Android, он вернётся назад, когда мы просим, чтобы дата вернулась на 4 недели, но когда мы просим его идти вперед на 6 недель (после нашей первоначальной даты), он не перевернет год вперед.
Я наблюдал это на 5.0.2 и 4.4.2
Так что вопрос, является ли это ошибка или каким-то свернутое предполагаемого поведения (особенности)?
Принимается, потому что это объясняет нечетные результаты, которые я видел, и отвечает на прямой вопрос. Благодарю. –
@ Rudi: Рад, что я мог пролить свет. Ключевым моментом является то, что любое поле, которое называется с помощью '_OF_' (примеры« HOUR_OF_DAY', 'WEEK_OF_YEAR',' DAY_OF_MONTH' и т. Д.), Обычно будет переполняться и откатываться к началу того, что они представляют. Это сложно, и, как я уже сказал, не ошибка, а странность. – Squonk