Почему 31 декабря 2010 г. возвращает 1 как неделю года?

Другой, более краткий, опция:

z = dict(x, **y)

Примечание : это стало популярным ответом, но важно указать, что, если y имеет какие-либо нестроковые ключи, то, что это работает вообще, является злоупотреблением деталью реализации CPython, и это не работает в Python 3, или в PyPy, IronPython или Jython. Кроме того, Guido не является поклонником . Таким образом, я не могу рекомендовать эту технику для прямо совместимого или перекрестной реализации портативный код, который действительно означает, что этого нужно избежать полностью.

26
задан AakashM 6 January 2011 в 10:02
поделиться

2 ответа

Я чувствую, что это лучший подход.

Calendar c = Calendar.getInstance();
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));

int thisWeek = c.get(Calendar.WEEK_OF_YEAR);
if (c.get(Calendar.MONTH) == Calendar.DECEMBER && thisWeek == 1)
    thisWeek = 53;

System.out.println(thisWeek);

Основным предположением здесь является то, что в декабре месяце неделя не может быть 1, следовательно, просто возвращается 53.

Пожалуйста, предложите, если я где-то ошибаюсь, и почему это не реализовано в Календаре Java.

0
ответ дан 28 November 2019 в 06:28
поделиться

Значения, рассчитанные для поля WEEK_OF_YEAR, колеблются от 1 до 53. Неделя 1 для года - это самый ранний семидневный период, начинающийся с getFirstDayOfWeek (), который содержит как минимум getMinimalDaysInFirstWeek () дней с этого года. Таким образом, это зависит от значений getMinimalDaysInFirstWeek (), getFirstDayOfWeek () и дня недели 1 января. Недели между неделей 1 года и 1 неделей следующего года нумеруются последовательно от 2 до 52 или 53 (как требуется).

Чтобы определить, является ли эта неделя последней неделей 2010 года или первой 2011 года, Java использует getMinimalDaysInFirstWeek javadoc . Если этот метод возвращает 7, то первая неделя, в которой все дни недели относятся к одному и тому же году, является первой, если он возвращает 1, то первая неделя с любыми днями следующего года - это первая неделя следующего года.

В этом случае первое января 2011 года приходится на субботу, поэтому считается первой неделей 2011 года, если вы хотите, чтобы неделя с одним днем ​​считалась уже первой неделей следующего года, если вы не делай:

Calendar c = Calendar.getInstance();
c.setMinimalDaysInFirstWeek(7);//anything more than 1 will work in this year
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));
System.out.println( c.get( Calendar.WEEK_OF_YEAR ) ); 

возвращает:

52
9
ответ дан 28 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: