Calender关于周需要注意的地方

在Calender里,如果你想要获取关于“周”的一些内容,不可避免地要清楚一点,

那就是JAVA里面的周,取值范围只有1~53

还需要使用两个设置

它们分别是:

calendar.setFirstDayOfWeek(Calendar.MONDAY);

calendar.setMinimalDaysInFirstWeek(4);
 

setFirstDayOfWeek()

是指定哪一天作为周的第一天,通常你不需要去设置它,因为它会读取系统时区,判断你是处于周一是第一天的国家,还是周日是第一天的国家。但是你去设置它也没有错。

setMinimalDaysInFirstWeek()

是指每年的第一个星期的最小天数,它默认值是1.

这是什么意思?

如下图:

这是2020年元旦的这一周,如果按照默认值,那么这一周就是2020年的第一周,2019.12.31也是2020年的第一周里面。

使用元旦这一天去调用Calender的是哪一周时calendar.get(Calendar.WEEK_OF_YEAR)就得到了答案:1

但是如果你设置setMinimalDaysInFirstWeek = 6

那么你调用的结果就不是1,而是52(或者53),Calender把这周算到去年里面了,本周是去年的52周或53周。

因为这一周从周一开始算起的话,在2020年只有5天,而你设置的本年度第一周的最小天数是6天,不符合,所以把它的周放到去年了。在这种情况下,不仅是calendar.get(Calendar.WEEK_OF_YEAR)值变成了52或53,同样的,calendar.getWeekYear()也变成了去年。注意,这个不是当前日期的年份,而是当前周的年份,它和calendar.get(Calendar.YEAR)是不一样的。

 

那么这个setMinimalDaysInFirstWeek()值,应该设定为多少?

应该设定为4!!!

为什么?

因为在其他系统里计算周也有各种各样的方法,但是无论怎么花样,总有一个类似于这样:

一周一共有7天,不可能平分,如果大于等于4天,算到这边,如果小于4则算到那边。

比如mysql的week函数,参数选择mode = 3 就代表着设置下面这俩:

calendar.setFirstDayOfWeek(Calendar.MONDAY);

calendar.setMinimalDaysInFirstWeek(4);

这样的话,java和mysql在周数据进行了完美的统一

 

关于mysql的week周函数讲解详情见:mysql根据周查询统计,比如week()或者DATE_FORMAT或者跨年要注意的几点

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值