You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

392 lines
13 KiB
Java

11 months ago
package com.engine.jucailinkq.common.util;
2 years ago
import org.apache.commons.lang3.StringUtils;
1 year ago
import weaver.general.TimeUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
1 year ago
import java.time.*;
2 years ago
import java.time.format.DateTimeFormatter;
2 years ago
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
1 year ago
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
2 years ago
public class DateUtil {
public static DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static DateTimeFormatter yyyyMMddHHmmss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static DateTimeFormatter yyyyMMddHHmm = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
public static DateTimeFormatter yyyyMM = DateTimeFormatter.ofPattern("yyyy-MM");
1 year ago
public static DateTimeFormatter yyyy = DateTimeFormatter.ofPattern("yyyy");
2 years ago
/**
* yyyy-MM
**/
private static final String MONTH_REGEX = "^([1-9]\\d{3})-(([0][1-9])|([1][0-2]))$";
/**
* yyyy-MM-dd,
**/
private static final String DATE_PATTERN = "^\\d{4}-\\d{2}-\\d{2}$";
1 year ago
public static String beforeMonth(String time,int month){
2 years ago
LocalDateTime localDateTime = DateUtil.getTime(time);
1 year ago
return localDateTime.minusMonths(month).format(yyyyMMdd);
2 years ago
}
1 year ago
public static String beforeMonth(String time){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.minusMonths(1).format(yyyyMM);
}
1 year ago
2 years ago
public static String lastMonth(String time){
2 years ago
LocalDateTime localDateTime = DateUtil.getTime(time);
2 years ago
2 years ago
return localDateTime.plusMonths(1).format(yyyyMM);
}
2 years ago
public static String lastMonth(String time,DateTimeFormatter dateTimeFormatter){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.plusMonths(1).format(dateTimeFormatter);
}
public static String nextMonth(String time,int month,DateTimeFormatter dateTimeFormatter){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.plusMonths(month).format(dateTimeFormatter);
}
1 year ago
public static String nextYear(String time,int year,DateTimeFormatter dateTimeFormatter){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.plusYears(year).format(dateTimeFormatter);
}
public static String beforeYear(String time,int year,DateTimeFormatter dateTimeFormatter){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.minusYears(year).format(dateTimeFormatter);
}
2 years ago
public static String beforeDay(String time,long day){
LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMdd).atStartOfDay();
return localDateTime.minusDays(day).format(yyyyMMdd);
}
public static String AfterDay(String time,long day){
LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMdd).atStartOfDay();
return localDateTime.plusDays(day).format(yyyyMMdd);
}
2 years ago
public static String beforeMinutes(String time,long minutes){
2 years ago
LocalDateTime localDateTime = DateUtil.getTime(time);
2 years ago
return localDateTime.minusMinutes(minutes).format(yyyyMMddHHmm);
2 years ago
}
public static String AfterMinutes(String time,long minutes){
2 years ago
LocalDateTime localDateTime = DateUtil.getTime(time);
2 years ago
return localDateTime.plusMinutes(minutes).format(yyyyMMddHHmm);
}
public static String AfterSeconds(String time,long seconds){
LocalDateTime localDateTime = DateUtil.getTime(time);
return localDateTime.plusSeconds(seconds).format(yyyyMMddHHmmss);
}
2 years ago
2 years ago
public static String nowMonth(String time){
LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMdd).atStartOfDay();
return localDateTime.format(yyyyMM);
}
public static String getCurrentMonth(){
return LocalDateTime.now().format(yyyyMM);
}
2 years ago
public static String getCurrentDate(){
return LocalDateTime.now().format(yyyyMMdd);
}
2 years ago
public static String getCurrentTime(){
return LocalDateTime.now().format(yyyyMMddHHmmss);
}
public static String getCurrentTime(String timeType){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeType);
return LocalDateTime.now().format(formatter);
}
2 years ago
//获得往后日期
2 years ago
public static String getCurrentDatePlusDay(int day){
return LocalDateTime.now().plusDays(day).format(yyyyMMdd);
}
2 years ago
//获得往前日期
public static String getCurrentDateMinusDay(int day){
return LocalDateTime.now().minusDays(day).format(yyyyMMdd);
}
2 years ago
2 years ago
public static LocalDateTime getTime(String time){
int length = time.length();
switch (length){
case 10:
2 years ago
return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
2 years ago
case 19:
2 years ago
return LocalDateTime.parse(time, yyyyMMddHHmmss);
2 years ago
case 16:
2 years ago
return LocalDateTime.parse(time, yyyyMMddHHmm);
2 years ago
}
return null;
}
2 years ago
2 years ago
/**
*
* @param startTime yyyy-MM-dd HH:mm:ss
* @return
*/
public static long getBetWeenHours(String startTime){
Duration duration = Duration.between(LocalDateTime.parse(startTime,yyyyMMddHHmmss),LocalDateTime.now());
1 year ago
2 years ago
return duration.toHours();
}
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenYears(String startTime){
Period duration = Period.between(LocalDate.parse(startTime,yyyyMMdd),LocalDateTime.now().toLocalDate());
1 year ago
2 years ago
return duration.getYears();
}
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
2 years ago
public static int getBetWeenYears(String startTime,String endTime){
Period duration = Period.between(LocalDate.parse(startTime,yyyyMMdd),LocalDate.parse(endTime,yyyyMMdd));
return duration.getYears();
}
1 year ago
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenMonths(String startTime,String endTime){
LocalDateTime startDate = DateUtil.getTime(startTime);
LocalDateTime endDate = DateUtil.getTime(endTime);
YearMonth startYearMonth = YearMonth.from(startDate);
YearMonth endYearMonth = YearMonth.from(endDate);
int betweenMonth = (int) ChronoUnit.MONTHS.between(startYearMonth, endYearMonth);
1 year ago
// if (startDate.getDayOfMonth()>endDate.getDayOfMonth()){
// betweenMonth= betweenMonth-1;
// }
1 year ago
return betweenMonth;
}
2 years ago
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
2 years ago
public static int getBetWeenDays(String startTime){
2 years ago
LocalDate startDate = LocalDate.parse(startTime);
LocalDate endDate = LocalDateTime.now().toLocalDate();
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
return Math.toIntExact(daysBetween);
}
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenDays(String startTime,String endTime){
LocalDate startDate = LocalDate.parse(startTime);
LocalDate endDate = LocalDate.parse(endTime);
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
return Math.toIntExact(daysBetween);
2 years ago
}
2 years ago
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenMinutes(String startTime,String endTime,DateTimeFormatter formatter){
LocalDateTime startDate = LocalDateTime.parse(startTime,formatter);
LocalDateTime endDate = LocalDateTime.parse(endTime,formatter);
long daysBetween = ChronoUnit.MINUTES.between(startDate, endDate);
return Math.toIntExact(daysBetween);
}
2 years ago
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenMinutes(String startTime,String endTime){
LocalDateTime startDate = DateUtil.getTime(startTime);
LocalDateTime endDate = DateUtil.getTime(endTime);
long daysBetween = ChronoUnit.MINUTES.between(startDate, endDate);
return Math.toIntExact(daysBetween);
}
2 years ago
/**
*
* @param startTime yyyy-MM-dd HH:mm:ss
* @param endTime yyyy-MM-dd HH:mm:ss
* @return
*/
public static long getBetWeenHours(String startTime,String endTime){
1 year ago
Duration duration = Duration.between(getTime(startTime),getTime(endTime));
2 years ago
2 years ago
return duration.toHours();
}
1 year ago
/**
*
* @param startTime
* @param endTime
* @return
*/
public static int getBetweenWeeks(String startTime,String endTime){
int days = getBetWeenDays(startTime,endTime);
int dayOfWeek = TimeUtil.getDayOfWeek(startTime);
if (dayOfWeek == 0){
dayOfWeek = 7;
}
days = days-(7-dayOfWeek);
return days/7;
}
2 years ago
1 year ago
/**
*
* @param time
* @return
*/
public static int getDays(String time,int CalendarType){
Calendar calendar = Calendar.getInstance();
calendar.set(Integer.valueOf(time.split("-")[0]), Integer.valueOf(time.split("-")[1]) - 1, 1);
return calendar.getActualMaximum(CalendarType);
}
1 year ago
public static String getTimeStr(int value){
String str = "";
if (value < 10){
str = "0"+value;
}else {
str = String.valueOf(value);
}
return str;
}
1 year ago
/**
*
*/
public static String getCurrentQuarter(String date){
String season1 = date.split("-")[0]+"-03-31";
String season2 = date.split("-")[0]+"-06-30";
String season3 = date.split("-")[0]+"-09-30";
String season4 = date.split("-")[0]+"-12-31";
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(season1)) <=0){
return season1;
}else if (DateUtil.getTime(date).compareTo(DateUtil.getTime(season1)) >0 &&
DateUtil.getTime(date).compareTo(DateUtil.getTime(season2)) <=0){
return season2;
}else if (DateUtil.getTime(date).compareTo(DateUtil.getTime(season2)) >0 &&
DateUtil.getTime(date).compareTo(DateUtil.getTime(season3)) <=0){
return season3;
}else{
return season4;
}
}
/**
*
*/
public static String getCurrentHalfYear(String date){
String season1 = date.split("-")[0]+"-06-30";
1 year ago
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(season1)) <=0){
return season1;
}else {
return date.split("-")[0]+"-12-31";
}
}
public static String getFormatLocalDate(Date date) {
if (date == null) {
return StringUtils.EMPTY;
}
LocalDateTime localDateTime = dateToLocalDateTime(date);
return getFormatLocalDate(localDateTime);
}
public static String getFormatLocalDate(LocalDateTime localDateTime) {
if (localDateTime == null) {
return StringUtils.EMPTY;
}
try {
return localDateTime.format(yyyyMMdd);
} catch (Exception e) {
return StringUtils.EMPTY;
}
}
public static LocalDateTime dateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
// 正则表达式用于匹配日期格式yyyy-MM-dd不验证日期是否合法
public static boolean dateIsValid(String date) {
if (date == null) {
return false;
}
// 编译正则表达式
Pattern pattern = Pattern.compile(DATE_PATTERN);
// 匹配日期字符串
Matcher matcher = pattern.matcher(date);
// 返回是否匹配的结果
return matcher.matches();
}
/**
*
*
* @param yearMonth
* @return
*/
public static boolean checkYearMonth(String yearMonth) {
return Pattern.matches(MONTH_REGEX, yearMonth);
}
/**
*
* @param startDateStr
* @param endDateStr
* @return
* @throws ParseException
*/
public static List<String> getDatesBetween(String startDateStr, String endDateStr) throws ParseException {
List<String> dates = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = sdf.parse(startDateStr);
Date endDate = sdf.parse(endDateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
while (calendar.getTime().before(endDate) || calendar.getTime().equals(endDate)) {
dates.add(sdf.format(calendar.getTime()));
calendar.add(Calendar.DATE, 1);
}
return dates;
}
2 years ago
}