java8 time工具_java8的时间段比较处理工具类TimeUtils

import org.jooq.lambda.tuple.Tuple2;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.LocalTime;

import java.util.List;

import java.util.Objects;

import java.util.Optional;

public class TimeUtils {

public static Boolean dateTimeInRange(LocalDateTime dateTime, Optional dateTimeFrom, Optional dateTimeTo, boolean includeHead, boolean includeLast) {

if (Objects.isNull(dateTime)) {

return false;

}

return dateTimeFrom.map(from -> includeHead ? !dateTime.isBefore(from) : dateTime.isAfter(from)).orElse(true) && dateTimeTo.map(to -> includeLast ? !dateTime.isAfter(to) : dateTime.isBefore(to)).orElse(true);

}

public static Boolean dateInRange(LocalDate date, Optional dateFrom, Optional dateTo, boolean includeHead, boolean includeLast) {

if (Objects.isNull(date)) {

return false;

}

return dateFrom.map(from -> includeHead ? !date.isBefore(from) : date.isAfter(from)).orElse(true) && dateTo.map(to -> includeLast ? !date.isAfter(to) : date.isBefore(to)).orElse(true);

}

public static Boolean timeInRange(LocalTime time, Optional timeFrom, Optional timeTo, boolean includeHead, boolean includeLast) {

if (Objects.isNull(time)) {

return false;

}

return timeFrom.map(from -> includeHead ? !time.isBefore(from) : time.isAfter(from)).orElse(true) && timeTo.map(to -> includeLast ? !time.isAfter(to) : time.isBefore(to)).orElse(true);

}

public static Boolean dateTimeInRange(LocalDateTime dateTime, Optional dateTimeFrom, Optional dateTimeTo) {

return dateTimeInRange(dateTime, dateTimeFrom, dateTimeTo, true, true);

}

public static Boolean dateInRange(LocalDate date, Optional dateFrom, Optional dateTo) {

return dateInRange(date, dateFrom, dateTo, true, true);

}

public static Boolean timeInRange(LocalTime time, Optional timeFrom, Optional timeTo) {

return timeInRange(time, timeFrom, timeTo, true, true);

}

public static Tuple2, Optional> dateTimeRange(List, Optional>> dateTimeList) {

if (dateTimeList.isEmpty()) {

throw new RuntimeException("dateTimeList is empty");

}

return dateTimeList.stream().reduce(new Tuple2<>(null, null), (z, e) -> {

Optional from0 = z.v1();

Optional to0 = z.v2();

final Optional from;

final Optional to;

if (Objects.nonNull(from0)) {

from = from0.flatMap(fromTime -> e.v1().flatMap(f -> fromTime.isBefore(f) ? Optional.of(fromTime) : Optional.of(f)));

}

else {

from = e.v1();

}

if (Objects.nonNull(to0)) {

to = to0.flatMap(toTime -> e.v2().flatMap(t -> toTime.isAfter(t) ? Optional.of(toTime) : Optional.of(t)));

}

else {

to = e.v2();

}

return new Tuple2<>(from, to);

}, (l, r) -> null);

}

public static Tuple2, Optional> dateRange(List, Optional>> dateList) {

if (dateList.isEmpty()) {

throw new RuntimeException("dateList is empty");

}

return dateList.stream().reduce(new Tuple2<>(null, null), (z, e) -> {

Optional from0 = z.v1();

Optional to0 = z.v2();

final Optional from;

final Optional to;

if (Objects.nonNull(from0)) {

from = from0.flatMap(fromTime -> e.v1().flatMap(f -> fromTime.isBefore(f) ? Optional.of(fromTime) : Optional.of(f)));

}

else {

from = e.v1();

}

if (Objects.nonNull(to0)) {

to = to0.flatMap(toTime -> e.v2().flatMap(t -> toTime.isAfter(t) ? Optional.of(toTime) : Optional.of(t)));

}

else {

to = e.v2();

}

return new Tuple2<>(from, to);

}, (l, r) -> null);

}

}

获取当天日期 获取本周一日期 获取本周日的日期 获取上周一日期:" + tt.getPreviousWeekday("yyyy-MM-dd")); 获取上周日日期:" + tt.getPreviousWeekSunday("yyyy-MM-dd")); 获取上周一日期:" + tt.getWeekday(-1, "yyyy-MM-dd")); 获取上周日日期:" + tt.getWeekSunday(-1, "yyyy-MM-dd")); 获取下周一日期:" + tt.getNextMonday("yyyy-MM-dd")); 获取下周日日期:" + tt.getNextSunday("yyyy-MM-dd")); 获取本月第一天日期:" + tt.getFirstDayOfMonth()); 获取本月最后一天日期:" + tt.getDefaultDay()); 获取上月第一天日期:" + tt.getPreviousMonthFirst("yyyy-MM-dd")); 获取上月最后一天的日期:" + tt.getPreviousMonthEnd("yyyy-MM-dd")); 获取某月第一天日期:" + tt.getMonthFirst(0, "yyyy-MM-dd")); 获取某月最后一天的日期:" + tt.getMonthEnd(0, "yyyy-MM-dd")); 获取下月第一天日期:" + tt.getNextMonthFirst("yyyy-MM-dd")); 获取下月最后一天日期:" + tt.getNextMonthEnd("yyyy-MM-dd")); 获取本年的第一天日期:" + tt.getCurrentYearFirst()); 获取本年最后一天日期:" + tt.getCurrentYearEnd()); 获取去年的第一天日期:" + tt.getPreviousYearFirst()); 获取去年的最后一天日期:" + tt.getPreviousYearEnd()); 获取明年第一天日期:" + tt.getNextYearFirst()); 获取明年最后一天日期:" + tt.getNextYearEnd()); 获取本季度第一天:" + tt.getThisSeasonFirstTime(11)); 获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11)); 获取两个日期之间间隔天数 获取当前月的第几周:" + tt.getWeekOfMonth()); 获取当前年份:" + tt.getYear()); 获取当前月份:" + tt.getMonth()); 获取今天在本年的第几天:" + tt.getDayOfYear()); 获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth()); 获得今天在本周的第几天:" + tt.getDayOfWeek()); 字符串转时间 获得一个日期所在周的星期几的日期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值