1、问题:
在某些情况下,会需要将日期按周来进行排序或统计,mysql就要用到week()或yearWeek()函数,就会发现,比如2016年的某一天,在mysql里面是属于第30周,但在JAVA中使用Calendar类计算出来,却是第31周,单纯的将mysql查询出来的周进行+1操作,会解决2016的问题,但到了2017年,就会出现问题了。
百度了下,很多人都碰到这个问题,后来在stackoverflow上找到了解决思路:使用JDK8提供的java.time类库可以完美解决。
2、原因:
在JAVA中,“周”由以下两个因素决定:
- 周的开始日期(星期一为一周的第一天,或星期日为每周的第一天)
- 第一周的最小天数(1~4天)
在mysql中,“周”由以下两个因素决定:
- 周的开始日期(星期一为一周的第一天,或星期日为每周的第一天),与JAVA相同
- 第一周最少包含4天,或第一周包含一周的第一天(如果星期一为一周的第一天,则必须包含星期一,才算第一周)
week函数由参数mode的值来控制星期由哪天开始
模式 | 星期的第一天 | 范围 | 星期 1 是第一天 |