需求: 给定需要的星期, 给定时间 ,需要显示指定时间在每个星期的时间信息(包含年月日信息)
1. 显示当前系统的时间信息
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEEE");
// 打印结果
// 2020-06-10 23:04:22 星期三
2. 需要提前设置下当前每周从周一开始计算, 不然一些国家从周日开始计算,会搞乱问题
calendar.setFirstDayOfWeek(Calendar.MONDAY);
3. 具体操作代码
`
long timeInMillisNow = calendar.getTimeInMillis();
int startH = 18;
int startM = 30;
int[] array = {
Calendar.MONDAY, Calendar.TUESDAY,
Calendar.WEDNESDAY, Calendar.THURSDAY,
Calendar.FRIDAY, Calendar.SATURDAY,
Calendar.SUNDAY,
};
long nextWeekTimes = 7 * 24 * 60 * 60;
calendar.setFirstDayOfWeek(Calendar.MONDAY);
for (int j = 0; j < array.length; j++) {
// instance.clear(Calendar.DAY_OF_WEEK);
// instance.clear(Calendar.HOUR);
// instance.clear(Calendar.MINUTE);
calendar.set(Calendar.DAY_OF_WEEK, array[j]);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.HOUR_OF_DAY, startH);
calendar.set(Calendar.MINUTE, startM);
String format1 = sf.format(calendar.getTime());
long diff = (calendar.getTimeInMillis() - timeInMillisNow) / 1000;
if (diff < 0) {
diff += nextWeekTimes;
}
JLog.i(j+" " + format1 + " " + diff);
}`
打印信息如下
2020-06-08 18:30:00 星期一 415538
2020-06-09 18:30:00 星期二 501938
2020-06-10 18:30:00 星期三 588338
2020-06-11 18:30:00 星期四 69938
2020-06-12 18:30:00 星期五 156338
2020-06-13 18:30:00 星期六 242738
2020-06-14 18:30:00 星期日 329138
这里特别要注意一个地方 Calendar.HOUR_OF_DAY
, 这里的意思是时间按照24小时来设置, 之前没注意 一直用Calendar.HOUR
设置时间,导致设置的时间只要超过12, 如13点, 就会跳到第二天时间, 很是头大
打印信息如下
2020-06-09 06:30:00 星期二 458105
2020-06-09 18:30:00 星期二 501305
2020-06-11 06:30:00 星期四 26105
2020-06-11 18:30:00 星期四 69305
2020-06-13 06:30:00 星期六 198905
2020-06-13 18:30:00 星期六 242105
2020-06-15 06:30:00 星期一 371705