web-dev-qa-db-ja.com

標準の日付形式マスクによる2019年の誤った週の計算

通常、私は標準の日付形式マスク_%Y%W_によって年の週を計算します。 2019年まではかなりうまくいきましたが、最後の日、2019年の最初の週(2018/12/31-2019/01/06)が2018年の最後の週番号53のように表示されていることに気付きました。そして2019年の週だけです/ 01/07-2019/01/13は2019年の最初の週です。それが正しいかどうかを確認しました。

どこでも、2018/12/31-2019/01/06の週が現在2019年の最初の週であることがわかります。Oracleでさえto_char(..., 'yyyyiw')を知っていますが、Rは知りません。少なくともそれは同じ意見を持つべきです。

それは私にとって重要であり、バグのように見えると思います。 R3.5.0を使用しています。

見る ?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.

OracleのフォーマットマスクIWは、その年の ISO週番号 を返します。つまり、%V in 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
1
rcs