TimeUtil
@Slf4j
public class TimeUtil {
public static final long ONE_MINUTE_IN_SECONDS = 60L;
public static final long ONE_HOUR_IN_MINUTES = 60L;
public static final long ONE_MINUTE_IN_MILLISECONDS = ONE_MINUTE_IN_SECONDS * 1000;
public static final long ONE_HOUR_IN_MILLISECONDS = 60L * ONE_MINUTE_IN_MILLISECONDS;
public static final long ONE_DAY_IN_MILLISECONDS = 24L * ONE_HOUR_IN_MILLISECONDS;
public static final long ONE_WEEK_IN_MILLISECONDS = 7 * 24L * ONE_HOUR_IN_MILLISECONDS;
public static final int ONE_DAY_IN_MIN = (int) (24 * ONE_MINUTE_IN_SECONDS);
public static final long ONE_DAY_IN_SECONDS = ONE_DAY_IN_MIN * ONE_MINUTE_IN_SECONDS;
public static final long ONE_MILLS = 1000L;
public static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String TIME_FORMAT_1 = "yyyy-MM-dd-HH-mm-ss";
public static final String TIME_FORMAT_2 = "yyyyMMdd";
public static final String TIME_FORMAT_3 = "yyyy-MM-dd";
public static final String TIME_FORMAT_4 = "HH:mm:ss";
public static boolean checkDateFormat(String str) {
boolean flag = false;
String regex = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";
Pattern pattern1 = Pattern.compile(regex);
Matcher isNo = pattern1.matcher(str);
if (isNo.matches()) {
flag = true;
}
return flag;
}
public static int getNowOfSeconds() {
return (int) (System.currentTimeMillis() / 1000);
}
public static long getNowOfMills() {
return System.currentTimeMillis();
}
public static long getNowEvenTime(int point) {
if (point <= 0) {
return 0;
}
int hourTest = getNowHour();
int mo = hourTest / point;
int hour = (mo + 1) * point;
int dayAdd = 0;
if (hour >= 24) {
hour = 0;
dayAdd = 1;
}
LocalDateTime localDateTime = LocalDateTime.of(LocalDateTime.now().getYear(), LocalDateTime.now().getMonth(), LocalDateTime.now().getDayOfMonth(), hour, 0, 0);
if (dayAdd > 0) {
localDateTime = localDateTime.plusDays(dayAdd);
}
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return instant.toEpochMilli();
}
public static int getNowHour() {
return LocalDateTime.now().getHour();
}
public static boolean isSameDay(long sourceTime, long targetTime) {
Instant instant1 = Instant.ofEpochMilli(sourceTime);
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault());
long day1 = localDateTime1.getLong(ChronoField.EPOCH_DAY);
Instant instant2 = Instant.ofEpochMilli(targetTime);
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault());
long day2 = localDateTime2.getLong(ChronoField.EPOCH_DAY);
return day1 == day2;
}
public static int distanceDay(long sourceTime, long targetTime) {
Instant instant1 = Instant.ofEpochMilli(sourceTime);
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault());
long day1 = localDateTime1.getLong(ChronoField.EPOCH_DAY);
Instant instant2 = Instant.ofEpochMilli(targetTime);
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault());
long day2 = localDateTime2.getLong(ChronoField.EPOCH_DAY);
int dis = (int)(day1-day2);
return Math.abs(dis);
}
public static int getWeekOfMonth() {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
return c.get(Calendar.WEEK_OF_MONTH);
}
public static int dayZeroSecondsFromTime(long time) {
return (int) (dayZeroMillsFromTime(time * 1000L) / 1000);
}
public static long dayZeroMillsFromTime(long time) {
Instant instant = Instant.ofEpochMilli(time);
LocalDateTime dt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
return dt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
public static String timeFormat(long time, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
LocalDateTime ldt = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault());
return ldt.format(dtf);
}
public static String timeFormat(LocalDateTime time, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return time.format(dtf);
}
public static Date timeFormat(String dateStr, String format) {
DateFormat df = new SimpleDateFormat(format);
try {
return df.parse(dateStr);
} catch (Exception e) {
log.error("日期转换错误:{}", dateStr);
return null;
}
}
public static int getTodayOfMinute() {
int nowOfMinutes = getNowOfMinutes();
int zeroMinuteFromNow = dayZeroMinuteFromNow();
return nowOfMinutes - zeroMinuteFromNow;
}
public static int getNowOfMinutes() {
return (int) (System.currentTimeMillis() / 1000 / 60);
}
public static int dayZeroMinuteFromNow() {
LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
return (int) (localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() / 60000);
}
public static int nextDayZeroMinuteFromNow() {
return (dayZeroMinuteFromNow() + ONE_DAY_IN_MIN);
}
public static int dayZeroSecondsFromNow() {
return (int) (dayZeroMillsFromNow() / ONE_MILLS);
}
public static long dayZeroMillsFromNow() {
LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
return localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
public static boolean isSameWeek(long oldTime) {
LocalDateTime nowTime = LocalDateTime.now();
Instant instant = Instant.ofEpochMilli(oldTime);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
int nowIndex = nowTime.getDayOfWeek().getValue();
int oldIndex = dateTime.getDayOfWeek().getValue();
if (nowTime.getYear() != dateTime.getYear() && oldIndex == nowIndex) {
return false;
}
nowTime = nowTime.plusDays(7 - nowIndex).withHour(0).withMinute(0).withSecond(0).withNano(0);
dateTime = dateTime.plusDays(7 - oldIndex).withHour(0).withMinute(0).withSecond(0).withNano(0);
return dateTime.compareTo(nowTime) == 0;
}
public static boolean isToday(long time) {
Instant instant = Instant.ofEpochMilli(time);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
return localDateTime.toLocalDate().isEqual(LocalDate.now());
}
public static int getNaturalDayFromTime(long time) {
Instant instant = Instant.ofEpochMilli(time);
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
long day = ldt.getLong(ChronoField.EPOCH_DAY);
long nowDay = LocalDate.now().getLong(ChronoField.EPOCH_DAY);
return (int) (nowDay - day);
}
public static int betweenDay(long time1, long time2) {
return (int) (Math.abs(time1 - time2) / ONE_DAY_IN_MILLISECONDS);
}
public static long getDay(long time) {
Instant instant = Instant.ofEpochMilli(time);
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
return ldt.getLong(ChronoField.EPOCH_DAY);
}
public static LocalDateTime getDateTimeOfMillis(long millis) {
Instant instant = Instant.ofEpochMilli(millis);
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
public static long getTimeInMillis(int year, int month, int day, int hour, int minute, int second,
int milliSecond) {
LocalDateTime ldt = LocalDateTime.of(year, month, day, hour, minute, second, milliSecond * 1000_000);
return ldt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
public static int getTodayOfSeconds() {
int nowOfSeconds = getNowOfSeconds();
int zeroSecondsFromNow = dayZeroSecondsFromNow();
return nowOfSeconds - zeroSecondsFromNow;
}
public static long getTheWeekZeroTime(){
LocalDate localDate = LocalDate.now();
LocalDate day2 = localDate.with(TemporalAdjusters.previous(java.time.DayOfWeek.SUNDAY)).plusDays(1);
return day2.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
public static int getTheNextZeroSecondTime(){
return (int) (getTheWeekZeroTime()/1000) + 7*24*3600;
}
}