根据日期计算当前日期所在周是日期所在年份的第几周
来源:互联网 发布:为什么叫软件定义网络 编辑:程序博客网 时间:2024/05/16 05:08
最近在做项目的过程中遇到了一个问题,就是我利用java的日期工具类获取周数的时候发现跟数据库的周数(特别是年与年的临界值)对应不上,故就做了一些分析,发现这里面还是有些玄机的。在获取周数的时候有两个重要的参数
//设置周一是一周的开始 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 每年的第一周最少有几天 odps函数 weekofyear 4天以上 calendar.setMinimalDaysInFirstWeek(4);
1、设置 周一作为没周的第一天,每年的第一周最少包含4天
/** * 根据日期字符串获取是当年的第几周 * @param date_str 格式 yyyy-MM-dd * @return */ public static Integer getWeekOfYear(String date_str) { try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(date_str); Calendar calendar = Calendar.getInstance(); // 设置周一是一周的开始 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 每年的第一周最少有几天 odps函数 weekofyear 4天以上 calendar.setMinimalDaysInFirstWeek(4); calendar.setTime(date); return calendar.get(Calendar.WEEK_OF_YEAR); } catch (Exception e) { return null; } }
System.out.println("2017-01-01>>>>>>>>"+getWeekOfYear("2017-01-01")); System.out.println("2017-01-02>>>>>>>>"+getWeekOfYear("2017-01-02")); System.out.println("2017-11-12>>>>>>>>"+getWeekOfYear("2017-11-12")); System.out.println("2017-11-13>>>>>>>>"+getWeekOfYear("2017-11-13")); System.out.println("2016-05-01>>>>>>>>"+getWeekOfYear("2016-05-01")); System.out.println("2016-05-02>>>>>>>>"+getWeekOfYear("2016-05-02")); System.out.println("2017-12-31>>>>>>>>"+getWeekOfYear("2017-12-31")); System.out.println("2018-01-01>>>>>>>>"+getWeekOfYear("2018-01-01")); System.out.println("2014-12-29>>>>>>>>"+getWeekOfYear("2014-12-29")); //1 System.out.println("2014-12-31>>>>>>>>"+getWeekOfYear("2014-12-31")); //1 System.out.println("2015-12-29>>>>>>>>"+getWeekOfYear("2015-12-29")); //53
得到
2017-01-01>>>>>>>>522017-01-02>>>>>>>>12017-11-12>>>>>>>>452017-11-13>>>>>>>>462016-05-01>>>>>>>>172016-05-02>>>>>>>>182017-12-31>>>>>>>>522018-01-01>>>>>>>>12014-12-29>>>>>>>>12014-12-31>>>>>>>>12015-12-29>>>>>>>>53
2、不进行任何设置
/** * 根据日期字符串获取是当年的第几周 * @param date_str 格式 yyyy-MM-dd * @return */ public static Integer getWeekOfYear(String date_str) { try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(date_str); Calendar calendar = Calendar.getInstance(); // 设置周一是一周的开始// calendar.setFirstDayOfWeek(Calendar.MONDAY); // 每年的第一周最少有几天 odps函数 weekofyear 4天以上// calendar.setMinimalDaysInFirstWeek(4); calendar.setTime(date); return calendar.get(Calendar.WEEK_OF_YEAR); } catch (Exception e) { return null; } }
调用
System.out.println("2017-01-01>>>>>>>>"+getWeekOfYear("2017-01-01")); System.out.println("2017-01-02>>>>>>>>"+getWeekOfYear("2017-01-02")); System.out.println("2017-11-12>>>>>>>>"+getWeekOfYear("2017-11-12")); System.out.println("2017-11-13>>>>>>>>"+getWeekOfYear("2017-11-13")); System.out.println("2016-05-01>>>>>>>>"+getWeekOfYear("2016-05-01")); System.out.println("2016-05-02>>>>>>>>"+getWeekOfYear("2016-05-02")); System.out.println("2017-12-31>>>>>>>>"+getWeekOfYear("2017-12-31")); System.out.println("2018-01-01>>>>>>>>"+getWeekOfYear("2018-01-01")); System.out.println("2014-12-29>>>>>>>>"+getWeekOfYear("2014-12-29")); //1 System.out.println("2014-12-31>>>>>>>>"+getWeekOfYear("2014-12-31")); //1 System.out.println("2015-12-29>>>>>>>>"+getWeekOfYear("2015-12-29")); //53
得到
2017-01-01>>>>>>>>12017-01-02>>>>>>>>12017-11-12>>>>>>>>462017-11-13>>>>>>>>462016-05-01>>>>>>>>192016-05-02>>>>>>>>192017-12-31>>>>>>>>12018-01-01>>>>>>>>12014-12-29>>>>>>>>12014-12-31>>>>>>>>12015-12-29>>>>>>>>1
总结:
这两个值设置的参数不一样获取的周数也就不一样,因为默认情况下calendar是把周日作为每周的第一天。如果在进行用周数进行查询或教研的逻辑时,一定要约定好设置参数,要不然就可能得不到自己想要的数据。
阅读全文
0 0
- 根据日期计算当前日期所在周是日期所在年份的第几周
- Java 日期加减 该当日期是所在月的第几周 所在月的最后一天
- 根据日期计算所在月的第几周和星期几
- C# / ASP.NET 计算某个日期所在的周是当年的第几周
- js根据日期计算周所在的范围
- 得到当前日期所在的年+周
- android 计算所在周所在月的前后日期
- 如何计算当前日期是当年的第几周?
- 计算当前日期是当年第几周的函数
- 计算当前日期是本年的第几周
- 计算当前日期是本年度的第几周
- 根据指定日期计算所在周一的日期
- php时间戳函数实现计算第几周,以及当天所在周的具体日期范围
- 计算当前日期所在星期内的所有日期
- 根据当前日期获得所在周的日期区间(周一和周日日期),一个月有多少天
- 当前日期是本月的第几周
- sql server 2005计算当前日期所在月份周数
- javaScript获取当前日期所在周和向前推N周所在的日期
- vitamio导入
- 小蓝退出舞台,谁能挺过O2O的第一个寒冬?
- linux telnet server 的安装设置
- 用于 Yii 2 的 AuthClient 扩展--创建你自己的验证客户端
- 代码检视工具Gerrit的日常使用
- 根据日期计算当前日期所在周是日期所在年份的第几周
- 实现MVC上传文件!
- python中is 与 == 的区别
- 11月22日云栖精选夜读:双11享Go了吗?2017阿里双11在线峰会续写科技盛宴!
- 开发小细节系列之一
- 线程池命名工具类
- 积攒了这么多技术干货,总有一款适合你
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- 如何让Wireshark支持(加密的HTTP2等)HTTPS报文分析