2019 неверный расчет недели по стандартной маске формата даты
Обычно я вычисляю неделю года по стандартной маске формата даты %Y%W
, До 2019 года это работало довольно хорошо, но в последние дни я заметил, что первая неделя 2019 года (2018/12/31-2019/01/06) показана как последняя неделя № 53 от 2018. И только неделя 2019/01/07-2019/01/13 - первая неделя 2019 года. Я проверил, правильно ли это.
Везде можно увидеть, что неделя 2018/12 / 31-2019 / 01/06 в настоящее время является первой неделей 2019 года. И даже Oracle это знает to_char(..., 'yyyyiw')
, но R нет. По крайней мере, так должно быть.
Это имеет значение для меня, и я думаю, что это похоже на ошибку. Я использую R 3.5.0.
1 ответ
Увидеть ?strftime
:
‘%U’ Week of the year as decimal number (00-53) using Sunday as the first day 1 of the week (and typically with the first Sunday of the year as day 1 of week 1). The US convention. ‘%V’ Week of the year as decimal number (01-53) as defined in ISO 8601. If the week (starting on Monday) containing 1 January has four or more days in the new year, then it is considered week 1. Otherwise, it is the last week of the previous year, and the next week is week 1. (Accepted but ignored on input.) ‘%W’ Week of the year as decimal number (00-53) using Monday as the first day of week (and typically with the first Monday of the year as day 1 of week 1). The UK convention.
Маска формата IW в Oracle возвращает номер недели ISO года, т.е. %V
в R:
R> x <- as.Date("2018-12-28") + 0:10
R> data.frame(date=x, weeknum=format(x, "%V"))
date weeknum
1 2018-12-28 52
2 2018-12-29 52
3 2018-12-30 52
4 2018-12-31 01
5 2019-01-01 01
6 2019-01-02 01
7 2019-01-03 01
8 2019-01-04 01
9 2019-01-05 01
10 2019-01-06 01
11 2019-01-07 02