2012年2月3日星期五

2012年1月1日不是2012年的第一周

> $ date -d "2012-01-01 00:00:00" +%U

> 01

>

> but in "man date"

> %U     week number of year, with Sunday as first day of week (00..53)

>

> Is it a bug?

给gnu发了封信,得到了详尽的解答,长知识了。

 ISO 8601 是一个神奇的标准,它定义了周数应该怎样数。
美国人按直觉定义每年1月1日所在的周为一年的第一周,而欧洲人制定的标准 ISO 8601 则不然。
首先, ISO 8601 定义每周的第一天为周日,其次,如果一年的第一周天数没有过半,则归入上一年的最后一周,第一个天数过半的周才真的算一年的第一周。
POSIX提供了支持这个标准的实现,也给出了多种其他符合直觉的选择,info date仔细读一下,深了去了。
查了一下中国国标,也是按这个ISO定义的。

没有评论: