Java设置每周从周一开始
2018-01-08 17:26
1321 查看
我们有时候代码中会获取周数据,这时候会用到Calendar类,来获取当前是该年第几周。不过很多时候大家实现方式会有坑,我就碰到过。。。。。。一言难尽哪。
国外都是以周日作为一周的开始,但我们中国人一般习惯把周一作为一周的开始。如果你不注意的话,当你在周日获取第几周,按周一来算本该是第5周的话,你可能会取到第6周的数据,这种感觉会让你非常酸爽的。
下面代码通过两种方式来实现周从周一开始,但是通过天数减一的方式是万万不可取的,因为大坑就在你面前,不行你就迈个步试试~
下面是2018年1月日历截图,方便大家对照:
参考资料:http://blog.cangzhitao.com/post/java/first-day-of-week.htm
国外都是以周日作为一周的开始,但我们中国人一般习惯把周一作为一周的开始。如果你不注意的话,当你在周日获取第几周,按周一来算本该是第5周的话,你可能会取到第6周的数据,这种感觉会让你非常酸爽的。
下面代码通过两种方式来实现周从周一开始,但是通过天数减一的方式是万万不可取的,因为大坑就在你面前,不行你就迈个步试试~
/** * Created by whc on 18/1/8. */ public class DateUtils { /** * 从周一开始获取当前周数(调Java原生方法) * @return * @throws ParseException */ public static String getCurrentWeekWithYearStartWithMonday(String dateDesc) throws ParseException { Calendar c = Calendar.getInstance(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); c.setTime(df.parse(dateDesc)); c.setFirstDayOfWeek(Calendar.MONDAY); return "" + c.get(Calendar.YEAR) + c.get(Calendar.WEEK_OF_YEAR); } /** * 获取当前周数(通过当前天数减1实现) * @param dateDesc * @return * @throws ParseException */ public static String getCurrentWeekWithYearStartWithMondayV2(String dateDesc) throws ParseException { Calendar c = Calendar.getInstance(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); c.setTime(df.parse(dateDesc)); c.add(Calendar.DAY_OF_YEAR, -1); return "" + c.get(Calendar.YEAR) + c.get(Calendar.WEEK_OF_YEAR); } public static String getCurrentWeekWithYearStartWithMondayV3(String dateDesc) throws ParseException { Calendar c = Calendar.getInstance(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); c.setTime(df.parse(dateDesc)); // c.add(Calendar.DAY_OF_YEAR, -1); return "" + c.get(Calendar.YEAR) + c.get(Calendar.WEEK_OF_YEAR); } public static void main(String[] args) throws ParseException { /** * 2018.1.7是周日,按周日为每周第一天算的话,应该是2018年第二周的第一天;按周一为每周第一天算的话,应该是2018年第一周的最后一天。 * 从结果来看,两种实现方式都是20181,没有问题 */ String dateDesc1 = "2018-01-07 05:00:00"; System.out.println("get week numbers of 2018-01-07 || " + getCurrentWeekWithYearStartWithMonday(dateDesc1) + " VS " + getCurrentWeekWithYearStartWithMondayV2(dateDesc1)); /** * 2018.1.8是周一,按周日为每周第一天算的话,应该是2018年第二周的第二天;按周一为每周第一天算的话,应该是2018年第二周的第一天。 * 从结果来看,两种实现方式都是20182,没有问题 */ String dateDesc2 = "2018-01-08 05:00:00"; System.out.println("get week numbers of 2018-01-08 || " + getCurrentWeekWithYearStartWithMonday(dateDesc2) + " VS " + getCurrentWeekWithYearStartWithMondayV2(dateDesc2)); /** * 2018.1.1是周一,按周日为每周第一天算的话,应该属于2018年第一周;按周一为每周第一天算的话,应该是2018年第一周的第一天。 * 从结果来看,第一种实现方式是20181,没问题;第二种实现方式是20171,完全错误,bug就此产生 */ String dateDesc3 = "2018-01-01 05:00:00"; System.out.println("get week numbers of 2018-01-01 || " + getCurrentWeekWithYearStartWithMonday(dateDesc3) + " VS " + getCurrentWeekWithYearStartWithMondayV2(dateDesc3)); String dateDesc4 = "2017-12-31 05:00:00"; System.out.println("get week numbers of 2017-12-31 || " + getCurrentWeekWithYearStartWithMonday(dateDesc4) + " VS " + getCurrentWeekWithYearStartWithMondayV2(dateDesc4)); } }
下面是2018年1月日历截图,方便大家对照:
参考资料:http://blog.cangzhitao.com/post/java/first-day-of-week.htm
相关文章推荐
- java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期
- Clander的用法。如何取得当前时间一个月后/前的时间。如何取得某个月的最后一天。如何取得今年的第一个周一。五月的第二个星期日。如何取得今年的第一周(注意国外的日历和国内可能不一样,如何设置一周开始
- JAVA学习1(开始设置)
- SQL Server设置周一为每周第一天
- java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期
- Eclipse自动补全设置与Eclipse源代码下载 以前使用VisualStudio和Sublime写代码的时候有很完善的代码提示,但是最近开始使用Eclipse弄JAVA的时候发现它的代码提示不
- java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期
- java Calendar 日期获取工具类,昨日开始时间,昨日结束时间,当前周周一日期,当前时间上月第一天,获取当前年第一天
- java获取当前日期所在的周的周一,并以周一为一周开始
- java零开始之第一篇:环境变量设置
- JAVA Calendar设置周一为第一天 4000
- 开始学习 java2 容器
- 最近在开始捡起java,所以会定期更新写java 的一些组件,有兴趣的朋友可以看下
- java进程内存占用超过xmx设置的问题
- Eclipse Java注释模板设置详解
- Eclipse Java注释模板设置详解
- JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
- java设置 自己的Property
- java 根据年 月 获取当前月每周日期区间
- Java 环境变量自动设置代码(采用批处理方法)