package com.endless.utils;
import org.apache.commons.lang3.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
private static final long DAYTIME_MILLISECONDS = 86400000L;
public static final String SDF_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
public static final String SDF_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String SDF_YYYY_MM_DD = "yyyy-MM-dd";
public static final String SDF_HH_MM = "HH:mm";
public static final String SDF_YYYY = "yyyy";
public static final String SDF_YYYY_DOT_M_DOT_D = "yyyy.M.d";
public static final String SDF_YYYY_DOT_MM = "yyyy.MM";
public static final String SDF_YYYY_MM_DD_AT_HH_MM_SS = "yyyy-MM-dd@HH:mm:ss";
/**
* 字符串转换成日期
*
* @param date 字符串
* @param pattern 格式
*/
public static Date string2Date(String date, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(date);
}
/**
* 字符串转换成日期
*
* @param date 以yyyy-MM-dd HH:mm:ss的pattern进行转换
*/
public static Date string2Date(String date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YYYY_MM_DD_HH_MM_SS);
return sdf.parse(date);
}
/**
* 将日期转换为字符串
*
* @param date 日期
* @param pattern 转化的格式,如yyyy-MM-dd HH:mm:ss
*/
public static String date2String(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 将日期转换为字符串
*
* @param date 默认转化为yyyy-MM-dd HH:mm:ss
*/
public static String date2String(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YYYY_MM_DD_HH_MM_SS);
return sdf.format(date);
}
/**
* 将传入的日期向前(或向后)滚动|amount|年
*
* @param date 日期
* @param amount 天数
*/
public static Date rollByYear(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, amount);
return calendar.getTime();
}
public static Date rollByYear(int amount) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, amount);
return calendar.getTime();
}
/**
* 将传入的日期向前(或向后)滚动|amount|月
*
* @param date 日期
* @param amount 天数
*/
public static Date rollByMonth(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, amount);
return calendar.getTime();
}
/**
* 将传入的日期向前(或向后)滚动|amount|月
*
* @param date 日期
* @param amount 天数
*/
public static long rollByMonths(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, amount);
return calendar.getTimeInMillis();
}
/**
* 将传入的日期向前(或向后)滚动|amount|天
*
* @param date 日期
* @param amount 天数
*/
public static long rollByDay(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, amount);
return calendar.getTimeInMillis();
}
/**
* 得到几天前/后的时间
*
* @param date 日期
* @param amount 天数
*/
public static Date rollByDays(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, amount);
return calendar.getTime();
}
public static Date rollByMinutes(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, amount);
return calendar.getTime();
}
/**
* 获取 amount 分钟的前后时间
*
* @param date 日期
* @param amount 天数
*/
public static Date rollBySeconds(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.SECOND, amount);
return calendar.getTime();
}
public static boolean isBefore(Date date, Date date1) {
return date1.before(date);
}
/**
* 得到几小时前/后的时间
*
* @param date 日期
* @param amount 天数
*/
public static Date rollByHour(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, amount);
return calendar.getTime();
}
/**
* 得到当下date
*/
public static Date getNowDate() {
return new Date();
}
/**
* 获取当天零点时间
*/
public static Date getCurrentZeroTime() {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 得到日期字符串
*
* @param date 日期
* @return 日期字符串
*/
public static String getDateFromTime(Date date) {
SimpleDateFormat sdf_date = new SimpleDateFormat(SDF_YYYY_MM_DD);
return sdf_date.format(date);
}
/**
* 计算两个日期的相差天数
* 注:只计算日期的差值,不精确到小时;结果可以有负值
*
* @param fromDate 起始日期
* @param endDate 结束日期
*/
public static int differDate(Date fromDate, Date endDate) throws ParseException {
return differDate(date2String(fromDate, SDF_YYYY_MM_DD),
date2String(endDate, SDF_YYYY_MM_DD));
}
/**
* 计算两个日期的相差天数 (2014-10-01 到 2014-10-07 为 7天)
* 注:只计算日期的差值,不精确到小时;结果可以有负值
*
* @param fromDate 形如yyyy-MM-dd
* @param endDate 形如yyyy-MM-dd
*/
public static int differDate(String fromDate, String endDate) throws ParseException {
Date fDate = string2Date(fromDate, SDF_YYYY_MM_DD);
Date eDate = string2Date(endDate, SDF_YYYY_MM_DD);
int cha = calculateDiffDay(fDate, eDate);
return cha >= 0 ? (cha + 1) : (cha - 1);
}
private static int calculateDiffDay(Date fDate, Date eDate) {
long cha = eDate.getTime() - fDate.getTime();
return (int) (cha / DAYTIME_MILLISECONDS);
}
public static boolean compete(String startDate, String endDate, String formatStr) {
if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)
|| StringUtils.isBlank(formatStr)) {
return false;
}
SimpleDateFormat format = new SimpleDateFormat(formatStr);
try {
Date sDate = format.parse(startDate);
if (endDate.contains("至今")) {
Calendar calendar = Calendar.getInstance();
if (formatStr.equals("yyyy")) {
endDate = calendar.get(Calendar.YEAR) + "";
} else if (formatStr.equals("yyyy.MM")) {
endDate = calendar.get(Calendar.YEAR) + "."
+ (calendar.get(Calendar.MONTH) + 1);
}
}
Date eDate = format.parse(endDate);
if (eDate.getTime() >= sDate.getTime()) {
return true;
}
} catch (ParseException e) {
return false;
}
return false;
}
public static String getDate(Date date, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(formatStr);
return date != null ? format.format(date) : "";
}
/**
* 将日期格式的字符串转换为长整型
*
* @param date 日期
* @param format 格式
*/
public static long convert2long(String date, String format) {
try {
if (format == null || "".equals(format))
format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sf = new SimpleDateFormat(format);
return sf.parse(date).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return 0l;
}
/**
* 时间计算
*
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param min 分
* @param sec 秒
* @return 日期
*/
public static Date calcDate(int year, int month, int day, int hour, int min, int sec) {
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR) + year;
month = cal.get(Calendar.MONTH) + month;
day = cal.get(Calendar.DATE) + day;
hour = cal.get(Calendar.HOUR_OF_DAY) + hour;
min = cal.get(Calendar.MINUTE) + min;
sec = cal.get(Calendar.SECOND) + sec;
cal.set(year, month, day, hour, min, sec);
return cal.getTime();
}
/**
* 时间计算
*
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param min 分
* @param sec 秒
* @return 日期
*/
public static String calcDate(int year, int month, int day, int hour, int min, int sec,
String format) {
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR) + year;
month = cal.get(Calendar.MONTH) + month;
day = cal.get(Calendar.DATE) + day;
hour = cal.get(Calendar.HOUR_OF_DAY) + hour;
min = cal.get(Calendar.MINUTE) + min;
sec = cal.get(Calendar.SECOND) + sec;
cal.set(year, month, day, hour, min, sec);
Date date = cal.getTime();
return date2String(date, format);
}
/**
* 计算相差天数
*/
public static int calcDate(String endDate, String startDate, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
try {
long t = formatter.parse(endDate).getTime() - formatter.parse(startDate).getTime();
return new Long((t / (1000 * 24 * 60 * 60))).intValue();
} catch (ParseException e) {
return 0;
}
}
/**
* @param dateStr 计算dateStr与days之和
* @param days 天数
* @param format 格式
*/
public static String calcDate(String dateStr, int days, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
try {
long time = formatter.parse(dateStr).getTime();
long t = time + (long) days * 1000 * 24 * 60 * 60;
Date d = new Date(t);
return formatter.format(d);
} catch (ParseException e) {
e.printStackTrace();
return dateStr;
}
}
/**
* 计算与当前时间相差天数
*/
public static int calcDays(String date, String format) {
if (date == null) {
return 5;
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
//开始结束相差天数
try {
return new Long((System.currentTimeMillis() - formatter.parse(date).getTime())
/ (1000 * 24 * 60 * 60)).intValue();
} catch (ParseException e) {
e.printStackTrace();
return 5;
}
}
/**
* 格式化页面时间显示
*
* @param deliverTime 时间字符串
* @param fmtStr 格式
*/
public static String formatShowTime(String deliverTime, String fmtStr) {
SimpleDateFormat sFmt = new SimpleDateFormat(SDF_YYYY_MM_DD_HH_MM_SS);
Date date = null;
try {
date = sFmt.parse(deliverTime);
} catch (ParseException e) {
e.printStackTrace();
}
return formatShowTime(date, fmtStr);
}
/**
* 格式化页面时间显示
*
* @param deliverTime 时间
* @param fmtStr 格式
*/
public static String formatShowTime(Date deliverTime, String fmtStr) {
try {
SimpleDateFormat fmt = new SimpleDateFormat(fmtStr);
return fmt.format(deliverTime);
} catch (Exception e) {
return StringUtils.EMPTY;
}
}
/**
* 时间计算
*
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param min 分
* @param sec 秒
*/
public static String calcDate(Date date, int year, int month, int day, int hour, int min,
int sec, String format) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
year = cal.get(Calendar.YEAR) + year;
month = cal.get(Calendar.MONTH) + month;
day = cal.get(Calendar.DATE) + day;
hour = cal.get(Calendar.HOUR_OF_DAY) + hour;
min = cal.get(Calendar.MINUTE) + min;
sec = cal.get(Calendar.SECOND) + sec;
cal.set(year, month, day, hour, min, sec);
Date resultDate = cal.getTime();
return date2String(resultDate, format);
}
/**
* 得到今夕是何年
*
* @return 形如 yyyy
*/
public static String getYear() {
return date2String(new Date(), SDF_YYYY);
}
/**
* 得到今夕是何年
*
* @return 形如 yyyy
*/
public static int getYear(Date date) {
return Integer.parseInt(date2String(date, SDF_YYYY));
}
public static long getSecond(Date begin, Date end) {
return (end.getTime() - begin.getTime()) / 1000;
}
public static long getMillisecond(Date begin, Date end) {
return (end.getTime() - begin.getTime());
}
/**
* 计算当前年份,并和传入值比较
*/
public static int calCurrentYear(String year, String format) {
SimpleDateFormat fmt = new SimpleDateFormat(format);
Date now = new Date();
String currentYear = fmt.format(now);
return year.compareTo(currentYear);
}
}
Java日期函数DateUtil
于 2023-03-24 10:01:49 首次发布