package com.base.utils;
import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 类DateUtil.java的实现描述:日期工具类
*/
public class DateUtil {
public final static String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public final static String YYYY_MM_DD_HH = "yyyy-MM-dd HH";
public final static String YYYY_MM_DD = "yyyy-MM-dd";
public final static String YYYY_MM = "yyyy-MM";
public final static String YYYYMMDD = "yyyyMMdd";
public final static String YYYYMMDDHH = "yyyyMMddHH";
public final static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public final static String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
public final static String YYYYMMDDHHMM = "yyyyMMddHHmm";
public final static String MM_DD = "MM-dd";
/**
* 判断传入的日期是否为同一天的日期
*
* @param d1
* @param d2
* @return
*/
public static boolean isSameDay(Date d1, Date d2) {
String dateString1 = dateToStr(d1, YYYYMMDD);
String dateString2 = dateToStr(d2, YYYYMMDD);
if (dateString1.equals(dateString2)) {
return true;
}
return false;
}
/**
* 通过制定的格式,将日期字符串解析为java.util.Date对象
*
* @param dateStr 日期字符串
* @param formatStr 解析的格式
* @return 转换后的结果:Date对象
* @throws ParseException
*/
public static Date strToDate(String dateStr, String formatStr) {
Date date = null;
if (dateStr != null && !"".equals(dateStr)) {
SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
/**
* 转换字符串(long型格式) 为java.util.Date对象
*
* @param longStr
* @return
*/
public static Date longStrToDate(String longStr) {
Date date = null;
if (StringUtils.isNotBlank(longStr) && StringUtils.isNumeric(longStr)) {
try {
date = new Date(Long.parseLong(longStr));
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return date;
}
/**
* 根据一个完整的日期,格式化成一个只到分钟的时间.yyyy-MM-dd HH:mm
*
* @param date
* @param formatFormat
* @return
*/
public static Date getMinuteDate(String date, String formatFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(strToDate(date, formatFormat));
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 根据一个完整的日期,格式化成一个只到天的时间.yyyy-MM-dd
*
* @param date
* @param formatFormat
* @return
*/
public static Date getDayDate(String date, String formatFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(strToDate(date, formatFormat));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 通过制定的格式,将Date对象格式化为字符串
*
* @param date 需要转换的Date对象
* @param formatStr 转换的格式
* @return 转换之后的字符串
*/
public static String dateToStr(Date date, String formatStr) {
String result = null;
if (date != null) {
SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
result = sdf.format(date);
}
return result;
}
/**
* 将字符串,格式化.
*
* @param date
* @param format
* @return
*/
public static String parseDateStr(String date, String format) {
if (StringUtils.isEmpty(date) || StringUtils.isEmpty(format)) {
return null;
}
SimpleDateFormat f = new SimpleDateFormat(format);
return f.format(strToDate(date, format));
}
/**
* 将一个字符串日期转换成另一个字符串日期.
*
* @param date 日期对象
* @param fromFormat 原来的日期格式
* @param toFormat 转换后的日期格式
* @return
*/
public static String parseDateStr(String date, String fromFormat, String toFormat) {
return dateToStr(strToDate(date, fromFormat), toFormat);
}
//
/**
* 获取当前系统时间
*
* @return
*/
public static Date getCurrDate() {
return new Date();
}
/**
* 当前年份+99
*
* @return
*/
public static Date getEffectiveDate() {
DateTime dt = new DateTime();
DateTime minusMonths = dt.plusYears(70);
return minusMonths.toDate();
}
/**
* 获取当前指定格式 的系统时间,可以改变分钟的数值 ,加或者减,例如:-1,10.
*
* @param formatStr 日期的格式化.
* @param changeMinute 正数或者负数。
* @return
*/
public static String getCurrCustomMinuteDate(String formatStr, int changeMinute) {
Calendar cal = new GregorianCalendar();
cal.setTime(getCurrDate());
cal.add(Calendar.MINUTE, changeMinute);
return dateToStr(cal.getTime(), formatStr);
}
/**
* 得到当前日期的 指定时间
*
* @param hour
* @param min
* @param sec
* @return
*/
public static Date getCurrDateFixTime(int hour, int min, int sec) {
Calendar cal = new GregorianCalendar();
cal.setTime(getCurrDate());
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, min);
cal.set(Calendar.SECOND, sec);
return cal.getTime();
}
/**
* 获取当前指定格式的系统时间
*
* @param formatStr
* @return
*/
public static String getCurrDate(String formatStr) {
return dateToStr(getCurrDate(), formatStr);
}
/**
* 获取指定日期的小时 如果date为nul则返回-1.
*
* @param date
* @return
*/
public static int getHour(Date date) {
if (date == null) {
return -1;
}
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.get(Calendar.HOUR_OF_DAY);
}
/**
* 获取指定日期的天,如果date为null则返回-1;
*
* @param date
* @return
*/
public static int getDay(Date date) {
if (date == null) {
return -1;
}
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 获取当月最大的天数.
*
* @param date
* @return
*/
public static int getMonthMaxDay(Date date) {
if (date == null) {
return -1;
}
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DATE);
}
/**
* 获取当前日期对应的上一个月的日期.
*
* @return
*/
public static Date getCurrUpMonthDate() {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.MONTH, -1);
return c.getTime();
}
/**
* 获取当前日期对应的前n个月的日期.
*
* @param n
* @return
*/
public static Date getCurrUpMonthDate(int n) {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.MONTH, -n);
return c.getTime();
}
/**
* 获取指定日期的上一个月的日期
*
* @return
*/
public static Date getUpMonthDate(String date, String dateFormat) {
Calendar c = new GregorianCalendar();
c.setTime(strToDate(date, dateFormat));
c.add(Calendar.MONTH, -1);
return c.getTime();
}
/**
* 获取当前日期对应的上一天的日期.
*
* @return
*/
public static Date getCurrUpDayDate() {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.DATE, -1);
return c.getTime();
}
/**
* 获取当前日期对应的下一天的日期.
*
* @return
*/
public static Date getCurrNextDayDate() {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.DATE, 1);
return c.getTime();
}
/**
* 获取当前日期对应的前n天的日期.
*
* @param n
* @return
*/
public static Date getCurrUpDayDate(int n) {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.DATE, -n);
return c.getTime();
}
/**
* 获取当前日期对应的后n天的日期.
*
* @param n
* @return
*/
public static Date getCurrNextDayDate(int n) {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.DATE, n);
return c.getTime();
}
/**
* 获取指定日期对应的后n天的日期.
* @param n
* @param date
* @return
*/
public static Date getCurrNextDayDate(int n ,Date date) {
Calendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.DATE, n);
return c.getTime();
}
/**
* 获取当前日期对应的后n分钟的日期.
*
* @param n
* @return
*/
public static Date getCurrNextMinuteDate(int n) {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.MINUTE, n);
return c.getTime();
}
/**
* 获取指定日期的上一天的日期。
*
* @param date
* @param dateFormat
* @return
*/
public static Date getUpDayDate(String date, String dateFormat) {
Calendar c = new GregorianCalendar();
c.setTime(strToDate(date, dateFormat));
c.add(Calendar.DAY_OF_MONTH, -1);
return c.getTime();
}
/**
* 获取指定日期的下一天的日期。
*
* @param date
* @param dateFormat
* @return
*/
public static Date getNextDayDate(Date date, String dateFormat) {
Calendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.DAY_OF_MONTH, 1);
return c.getTime();
}
/**
* 获取指定日期的上n周的日期。
*
* @param n
* @return
*/
public static Date getCurrUpWeekDate(int n) {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH, -7 * n);
return c.getTime();
}
/**
* 获取指定日期的上一周的日期。
*
* @param date
* @param dateFormat
* @return
*/
public static Date getUpWeekDate(String date, String dateFormat) {
Calendar c = new GregorianCalendar();
c.setTime(strToDate(date, dateFormat));
c.add(Calendar.DAY_OF_MONTH, -7);
return c.getTime();
}
/**
* 计算指定日期加上后面2个日期之间的差值的日期,精确到秒
*
* @param d1 指定日期
* @param d2 计算差值日期1
* @param d3 计算差值日期2
* @return
*/
public static Date addDateInterval(Date d1, Date d2, Date d3) {
long d1LongValue = d1.getTime();
long d2LongValue = d2.getTime();
long d3LongValue = d3.getTime();
long lastDateValue = d1LongValue + Math.abs(d3LongValue - d2LongValue);
Date newDate = new Date(lastDateValue);
return newDate;
}
/**
* 计算指定日期加上增量时间后的日期,精确到秒
*
* @param date 待处理的日期
* @param addition 增加的毫秒数
* @return Date
*/
public static Date addDate(Date date, long addition) {
long dateLongValue = date.getTime();
long lastDateValue = dateLongValue + addition;
Date newDate = new Date(lastDateValue);
return newDate;
}
/**
* 检查传入日期是否在当前日期之前
*
* @return boolean
*/
public static boolean isLate(Date date) {
return getCurrDate().after(date);
}
/**
* 获取两个日期的时间差(单位:毫秒)
*
* @param startDateStr
* @param endDateStr
* @return
*/
public static long getIntervalMilSeconds(String startDateStr, String endDateStr, String dateFormat)
throws ParseException {
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
Date startDate = format.parse(startDateStr);
Date endDate = format.parse(endDateStr);
return endDate.getTime() - startDate.getTime();
}
/**
* java.sql.Timestamp转换为java.util.Date
*
* @param time
* @return
*/
public static Date timestampToDate(Timestamp time) {
return new Date(time.getTime());
}
/**
* 获得当天是周几 1-7
*
* @return
*/
public static int getCurrWeek() {
Calendar calendar = Calendar.getInstance();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return dayOfWeek == 0 ? 7 : dayOfWeek;
}
/**
* 获取指定日期的分钟 如果date为nul则返回-1.
*
* @param date
* @return
*/
public static int getMinute(Date date) {
if (date == null) {
return -1;
}
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.get(Calendar.MINUTE);
}
/**
* 获取当前时间一个月的时间
* @return
*/
public static String getAMonthLater(){
DateTimeFormatter format1 = DateTimeFormat.forPattern("yyyy月MM日dd日 HH:mm:ss");
DateTime dt = new DateTime();
DateTime before1month = dt.plusMonths(1);
return before1month.toString(format1);
}
/**
* 获取当前扫码时间
* @return
*/
public static String getCurrentDate(){
DateTimeFormatter format1 = DateTimeFormat.forPattern("yyyy月MM日dd日 HH:mm:ss");
DateTime dt = new DateTime();
return dt.toString(format1);
}
public static void main(String[] args) {
Date effectiveDate = DateUtil.getEffectiveDate();
System.out.println(effectiveDate.toLocaleString());
}
}
DateUtilt
最新推荐文章于 2023-11-10 16:48:59 发布