SimpleDateFormat关于周的计算问题

SimpleDateFormat关于周的计算问题

问题

最近项目中要实现一个按照周查询功能,本来是一个简单功能,但是在测试出现一个问题,查询的数据和原本要的数据差了一周。后来发现是SimpleDateFormat和前端日期控件对每年的第一周定义不一样导致的。

前端的代码:使用week,今天是2021年7月17日,显示的本周今年的28周。

 按照周:<input type="week" id="weekTime">

在这里插入图片描述
后端代码:

代码:

/**
 * @author lingxiangchen
 * @date 2021/7/17 15:11
 */
public class TimeTest {

    public static void main(String[] args) {
 
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
        Date newTime=sdf1.parse("2021-07-17");
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-ww");
        System.out.println(sdf2.format(newTime));

    }
}

运行结果:

2021-29

后端运行的结果显示:本周是今年的29周。相差了一周。

原因

查资料才了解到,一年的第一周,是第一个满4天的一周。下图是html5中的week控件显示的效果。
图一:2021年第一周开始的时间是4号,不是1号。因为1号的这一周,不满4天。
图二:2020年1号这一天所在的周达到了4天,所以2020年1月1号这个周为第一周。
但是java中使用SimpleDateFormat这方法是:每年的一号为第一周的开始。
图一
图二

解决的方法

网上找到的解决方法:用Calendar,用setMinimalDaysInFirstWeek方法

/**
 * @author lingxiangchen
 * @date 2021/7/17 15:11
 */
public class TimeTest {

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
        calendar.setMinimalDaysInFirstWeek(4);//第一个满4天周才算一年的第一周
        calendar.setTime(sdf.parse("2021-01-01"));
        int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
        int year=calendar.get(Calendar.YEAR);
        System.out.println("year:"+year+" week:"+weekNo);
    }
}

结果:

year:2021 week:53

可以看出,"周"对了。但是这里"年"不对,不过java这个年指的实际的年,不是周所在的年。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值