Update
This commit is contained in:
parent
7967c1dbe2
commit
c8f1bb72f8
@ -0,0 +1,113 @@
|
||||
package io.izzel.taboolib.util.lite.cooldown;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2020-02-18 14:13
|
||||
*/
|
||||
public enum RealTime {
|
||||
|
||||
/**
|
||||
* 周日开始,周六结束
|
||||
*/
|
||||
START_IN_SUNDAY(r -> {
|
||||
Calendar time = Calendar.getInstance();
|
||||
switch (r.unit) {
|
||||
case HOUR: {
|
||||
// 重置日期
|
||||
time.set(Calendar.MILLISECOND, 0);
|
||||
time.set(Calendar.SECOND, 0);
|
||||
time.set(Calendar.MINUTE, 0);
|
||||
// 推进日期
|
||||
time.add(Calendar.HOUR, r.value);
|
||||
return time.getTimeInMillis();
|
||||
}
|
||||
case DAY: {
|
||||
// 重置日期
|
||||
time.set(Calendar.MILLISECOND, 0);
|
||||
time.set(Calendar.SECOND, 0);
|
||||
time.set(Calendar.MINUTE, 0);
|
||||
time.set(Calendar.HOUR_OF_DAY, 0);
|
||||
// 推进日期
|
||||
time.add(Calendar.DAY_OF_YEAR, r.value);
|
||||
return time.getTimeInMillis();
|
||||
}
|
||||
case WEEK: {
|
||||
// 重置日期
|
||||
time.set(Calendar.MILLISECOND, 0);
|
||||
time.set(Calendar.SECOND, 0);
|
||||
time.set(Calendar.MINUTE, 0);
|
||||
time.set(Calendar.HOUR_OF_DAY, 0);
|
||||
time.set(Calendar.DAY_OF_WEEK, 1);
|
||||
// 推进日期
|
||||
time.add(Calendar.WEEK_OF_YEAR, r.value);
|
||||
return time.getTimeInMillis();
|
||||
}
|
||||
}
|
||||
return 0L;
|
||||
}),
|
||||
|
||||
/**
|
||||
* 周一开始,周日结束
|
||||
*/
|
||||
START_IN_MONDAY(r -> {
|
||||
Calendar time = Calendar.getInstance();
|
||||
switch (r.unit) {
|
||||
case HOUR: {
|
||||
// 同上处理
|
||||
return START_IN_SUNDAY.next.apply(r);
|
||||
}
|
||||
case DAY: {
|
||||
// 同上处理
|
||||
return START_IN_SUNDAY.next.apply(r);
|
||||
}
|
||||
case WEEK: {
|
||||
// 判断周日
|
||||
if (time.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
|
||||
// 推进日
|
||||
time.add(Calendar.DAY_OF_YEAR, 1 + ((r.value - 1) * 7));
|
||||
} else {
|
||||
// 推进周
|
||||
time.add(Calendar.WEEK_OF_YEAR, r.value);
|
||||
// 重置日
|
||||
time.set(Calendar.DAY_OF_WEEK, 2);
|
||||
}
|
||||
// 重置时
|
||||
time.set(Calendar.HOUR_OF_DAY, 0);
|
||||
// 重置分
|
||||
time.set(Calendar.MINUTE, 0);
|
||||
// 重置秒
|
||||
time.set(Calendar.SECOND, 0);
|
||||
return time.getTimeInMillis();
|
||||
}
|
||||
}
|
||||
return 0L;
|
||||
});
|
||||
|
||||
Function<In, Long> next;
|
||||
|
||||
RealTime(Function<In, Long> next) {
|
||||
this.next = next;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一周期的起始时间
|
||||
*/
|
||||
public long nextTime(RealTimeUnit unit, int value) {
|
||||
return next.apply(new In(unit, value));
|
||||
}
|
||||
|
||||
class In {
|
||||
|
||||
private RealTimeUnit unit;
|
||||
private int value;
|
||||
|
||||
public In(RealTimeUnit unit, int value) {
|
||||
this.unit = unit;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
package io.izzel.taboolib.util.lite.cooldown;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2020-02-18 14:16
|
||||
*/
|
||||
public enum RealTimeUnit {
|
||||
|
||||
/**
|
||||
* 以时为单位
|
||||
*/
|
||||
HOUR,
|
||||
|
||||
/**
|
||||
* 以日为单位
|
||||
*/
|
||||
DAY,
|
||||
|
||||
/**
|
||||
* 以周为单位
|
||||
*/
|
||||
WEEK
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user