import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtil {
private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
private final static String TZ_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
private final static String YYYY_MM_DD_PATTERN = "yyyy-MM-dd";
private final static String YYYY_MM_DD_SPRIT_PATTERN = "yyyy/MM/dd";
private final static String M_D_PATTERN = "M/d";
private final static String HH_MM_SS_PATTERN = "HH:mm:ss";
private final static String YYYY_MM_dd_HH_mm_ss_PATTERN = "yyyy/MM/dd HH:mm:ss";
private final static String YYYY_MM_dd = "yyyy-MM-dd 00:00:00";
/**
* date转string
*
* @param date
* @param pattern 指定样式
* @return
*/
public static String dateToString(Date date, String pattern) {
return DateFormatUtils.format(date, pattern);
}
/**
* string转 date
*
* @param pattern 指定样式
* @param date
*/
public static Date stringToDate(String date, String pattern) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
return dateFormat.parse(date);
}
/**
* 将TZ-String类型的日期格式化为时分秒String
*
* @param date
* @return
* @throws ParseException
*/
public static String formatTime(String date, String pattern) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
return DateFormatUtils.format(dateFormat.parse(date), HH_MM_SS_PATTERN);
}
/**
* date转long
*/
public static long dateToLong(Date date) {
long dateLong = date.getTime();
return dateLong;
}
/**
* long转date
*/
public static Date longToDate(long dateLong) {
Date date = new Date(dateLong);
return date;
}
/**
* 获取当前时间
* 格式:yyyy/MM/dd 00:00:00
*/
public static String getCurrentDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd 00:00:00");
return sdf.format(new java.util.Date());
}
public static int toYear(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
public static String getYearMonthday(Date date) {
Calendar calendar = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// long l1 = format.parse(format.format(calendar.getTime())).getTime();
return format.format(calendar.getTime());
}
/**
* 获取本地日期
* 格式 :yyyy-MM-dd 2022-01-20
*/
public static LocalDate getDateTime() {
return LocalDate.now();
}
/**
* LocalDate转换成Date
* 格式 : Mon Jan 17 00:00:00 CST 2022
*/
public static Date localDateToDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
/**
* Date转 LocalDate
* 格式 :yyyy-MM-dd
*/
public static LocalDate dateToLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* Date转 LocalDateTime
* 格式 :
*/
public static LocalDateTime dateToLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
/**
* LocalDateTime转 Date
* 格式 :
*/
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static Date addDate(Date date, long day) throws Exception {
// 得到指定日期的毫秒数
long time = date.getTime();
// 要加上的天数转换成毫秒数
day = day * 24 * 60 * 60 * 1000;
// 相加得到新的毫秒数
time += day;
// 将毫秒数转换成日期
return new Date(time);
}
/**
* 时间加减方法,offset = 负数,则减;负责,则加
*
* @param date
* @param offset
*/
public static Date dateAdd(Date date, int offset) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.DATE, offset);
return calendar.getTime();
}
/**
* 设置为当天最小时间戳
*/
public static Date dateConvertMinTimestamp(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 设置为当天最大时间戳
*/
public static Date dateConvertMaxTimestamp(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 获取到当天最大时间戳的差值
*/
public static int getMaxTimeStamapDValueBySecond() {
return (int) ((dateConvertMaxTimestamp(new Date()).getTime() - System.currentTimeMillis() + 1) / 1000);
}
public final static long ONE_DAY_TO_MILLISECOND = 86400000L;
public final static int ONE_HOUR_TO_MILLISECOND = 3600000;
public final static int ONE_MINUTE_TO_MILLISECOND = 60000;
public final static int ONE_SECOND_TO_MILLISECOND = 1000;
public final static String DAY_CNAME = "天";
public final static String HOUR_CNAME = "小时";
public final static String MINUTE_CNAME = "分";
public final static String SECOND_CNAME = "秒";
public final static String DAY_ENAME = "d";
public final static String HOUR_ENAME = "h";
public final static String MINUTE_ENAME = "m";
public final static String SECOND_ENAME = "s";
/**
* 格式为xx小时xx分钟xx秒
*/
public static String longTimeFormatToHMS(Long time) {
if (time == null || time == 0L) {
return "";
}
StringBuilder result = new StringBuilder();
int day = (int) (time / ONE_DAY_TO_MILLISECOND);
if (day > 0) {
result.append(day).append(DAY_CNAME);
time = time - day * ONE_DAY_TO_MILLISECOND;
}
int hour = (int) (time / ONE_HOUR_TO_MILLISECOND);
if (hour > 0) {
result.append(hour).append(HOUR_CNAME);
time = time - hour * ONE_HOUR_TO_MILLISECOND;
}
int minute = (int) (time / ONE_MINUTE_TO_MILLISECOND);
if (minute > 0) {
result.append(minute).append(MINUTE_CNAME);
time = time - minute * ONE_MINUTE_TO_MILLISECOND;
}
int second = Math.round(time / ONE_SECOND_TO_MILLISECOND);
if (result.length() < 1 && second < 1) {
second = 1;
}
result.append(second).append(SECOND_CNAME);
return result.toString();
}
/**
* 时分秒格式为 xx h xx m xx
*
* @param time
* @return
*/
public static String longTimeFormatToHMSEName(Long time) {
if (time == null || time == 0L) {
return "";
}
StringBuilder result = new StringBuilder();
int day = (int) (time / ONE_DAY_TO_MILLISECOND);
if (day > 0) {
result.append(day).append(DAY_ENAME);
time = time - day * ONE_DAY_TO_MILLISECOND;
}
int hour = (int) (time / ONE_HOUR_TO_MILLISECOND);
if (hour > 0) {
result.append(hour).append(HOUR_ENAME);
time = time - hour * ONE_HOUR_TO_MILLISECOND;
}
int minute = (int) (time / ONE_MINUTE_TO_MILLISECOND);
if (minute > 0) {
result.append(minute).append(MINUTE_ENAME);
time = time - minute * ONE_MINUTE_TO_MILLISECOND;
}
int second = Math.round(time / ONE_SECOND_TO_MILLISECOND);
if (result.length() < 1 && second < 1) {
second = 1;
}
result.append(second).append(SECOND_ENAME);
return result.toString();
}
/**
* 转化为秒
*
* @param time
* @return
*/
public static String longTimeFormatToS(Long time) {
if (time == null || time == 0L) {
return "";
}
return String.valueOf(Math.round(time / ONE_SECOND_TO_MILLISECOND));
}
/**
* 判断两个日期年月日是否相同
*/
public static boolean dateCompare(Date source, Date target) {
Calendar srouceCalendar = new GregorianCalendar();
Calendar targetCalendar = new GregorianCalendar();
srouceCalendar.setTime(source);
targetCalendar.setTime(target);
if (srouceCalendar.get(Calendar.YEAR) == targetCalendar.get(Calendar.YEAR)
&& srouceCalendar.get(Calendar.MONTH) == targetCalendar.get(Calendar.MONTH)
&& srouceCalendar.get(Calendar.DATE) == targetCalendar.get(Calendar.DATE)) {
return true;
}
return false;
}
public static int dateBetween(Date source, Date target) {
Calendar calendarSource = new GregorianCalendar();
Calendar calendarTarget = new GregorianCalendar();
calendarSource.setTime(source);
calendarSource.set(Calendar.HOUR_OF_DAY, 0);
calendarSource.set(Calendar.MINUTE, 0);
calendarSource.set(Calendar.SECOND, 0);
calendarSource.set(Calendar.MILLISECOND, 0);
calendarTarget.setTime(target);
calendarTarget.set(Calendar.HOUR_OF_DAY, 0);
calendarTarget.set(Calendar.MINUTE, 0);
calendarTarget.set(Calendar.SECOND, 0);
calendarTarget.set(Calendar.MILLISECOND, 0);
int day = (int) (Math.abs(calendarSource.getTimeInMillis() - calendarTarget.getTimeInMillis()) / ONE_DAY_TO_MILLISECOND);
return Math.abs(day);
}
public static void main(String[] args) throws Exception {
String str = DateUtil.dateToString(new Date(), TZ_DATE_PATTERN);
System.out.println(str);
String yearMonthday = DateUtil.getYearMonthday(new Date());
System.out.println(yearMonthday);
LocalDate date = DateUtil.getDateTime();
System.out.println(date);
}
}