栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java最准确的获取当前一周开始时间和结束时间

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java最准确的获取当前一周开始时间和结束时间

前言

今天要做一个以周为单位的数据库查询,那么首先就是要获取当前周的开始时间和结束时间,想起来好像挺简单的,在获取的过程中遇到不少坑,现在我把我遇到的问题一一列举出来

预期

我想要是时间格式大概就是这样一周的第一天00点00分00秒到最后一天的23点59分59秒

起始时间:xxxx-xx-xx 00:00:00
结束时间:xxxx-xx-xx 23:59:59


问题
  • 获取到的一周的第一天是星期天,然后我查了一下有些国家就是把星期天当作一天的开始,有些国家是把周一当作一天的开始(因为我这边做的是国外内都出的APP,我就在犹豫到底是周一开始还是周日开始,最后这个讨论决定就用周日当第一天,这个可以看你们自己的需求)
  • 获取时间戳的时候,我看Log输出Date返回的日期是2022-04-24 00:00:00,就在我欣喜获取成功的时候,我拿输出的时间戳去转换一下,发现就变成了2022-04-24 8:00:00?啊这是嘛情况,我切换其它国家的时区还都不一样,疯了,Date明明正常输出,怎么变成时间戳就变了,于是我就强制设置时区为GMT+8就正常了
  • 最后还发现时间戳多了几百毫秒,原因是Calendar.MILLISECOND没有设置

最后我贴出来正确的获取方法

这里我会写两种获取方法


第一种,获取星期日到星期六为一周的起始和结束时间


第二种,获取星期一到星期日为一周的起始和结束时间


获取星期日作为一周的第一天的起始时间和结束时间
public static long[] getCurrentWeekTimeFrame() {
   Calendar calendar = Calendar.getInstance();
   calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
   //start of the week
   calendar.add(Calendar.DAY_OF_WEEK, -(calendar.get(Calendar.DAY_OF_WEEK) - 1));
   calendar.set(Calendar.HOUR_OF_DAY, 0);
   calendar.set(Calendar.MINUTE, 0);
   calendar.set(Calendar.SECOND, 0);
   calendar.set(Calendar.MILLISECOND, 0);

   long startTime = calendar.getTimeInMillis();
   //end of the week
   calendar.add(Calendar.DAY_OF_WEEK, 6);
   calendar.set(Calendar.HOUR_OF_DAY, 23);
   calendar.set(Calendar.MINUTE, 59);
   calendar.set(Calendar.SECOND, 59);
   calendar.set(Calendar.MILLISECOND, 999);
   long endTime = calendar.getTimeInMillis();
   return new long[]{startTime, endTime};
}
获取星期一作为一周的第一天的起始时间和结束时间
public static long[] getCurrentWeekTimeFrame() {
   Calendar calendar = Calendar.getInstance();
   calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
   //start of the week
   calendar.add(Calendar.DAY_OF_WEEK, -(calendar.get(Calendar.DAY_OF_WEEK) - 2));
   calendar.set(Calendar.HOUR_OF_DAY, 0);
   calendar.set(Calendar.MINUTE, 0);
   calendar.set(Calendar.SECOND, 0);
   calendar.set(Calendar.MILLISECOND, 0);

   long startTime = calendar.getTimeInMillis();
   //end of the week
   calendar.add(Calendar.DAY_OF_WEEK, 6);
   calendar.set(Calendar.HOUR_OF_DAY, 23);
   calendar.set(Calendar.MINUTE, 59);
   calendar.set(Calendar.SECOND, 59);
   calendar.set(Calendar.MILLISECOND, 999);
   long endTime = calendar.getTimeInMillis();
   return new long[]{startTime, endTime};
}

仔细一看两种方法区别不大
calendar.get(Calendar.DAY_OF_WEEK) - 2
就是这里做了一个减2的动作


第一种做了-1,一周是星期日到星期六
第二种做了-2,一周是星期一到星期日

这里大家看自己需求用哪种方法,你也可以通过判断在某些国家用星期日当前第一天,在另一些国家星期一当作第一天


有什么问题,欢迎大家在评论区留言,有时间看到我就会回复

欢迎收藏 Felix的Android笔记

持续更新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号