今天要做一个以周为单位的数据库查询,那么首先就是要获取当前周的开始时间和结束时间,想起来好像挺简单的,在获取的过程中遇到不少坑🕳,现在我把我遇到的问题一一列举出来
我想要是时间格式大概就是这样一周的第一天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笔记
持续更新
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)