wg-basic/basic-util/src/main/java/ink/wgink/util/date/DateUtil.java
2021-03-18 12:04:06 +08:00

458 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ink.wgink.util.date;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 说明:日期处理 创建人CM 修改时间2015年11月24日
*/
public class DateUtil {
public final static String AM = "AM";
public final static String PM = "PM";
public final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
public final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
public final static SimpleDateFormat sdfd = new SimpleDateFormat("dd");
public final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
public final static SimpleDateFormat sdfDayZh = new SimpleDateFormat("yyyy年MM月dd日");
public final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
public final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
public final static SimpleDateFormat sdfYearMonth = new SimpleDateFormat("yyyyMM");
public static String getZhDate(String date) {
try {
return sdfDayZh.format(sdfDay.parse(date));
} catch (Exception e) {
e.printStackTrace();
return date;
}
}
/**
* 校验日期格式
*
* @param date
* @param simpleDateFormat
* @return
*/
public static boolean checkFormat(String date, SimpleDateFormat simpleDateFormat) {
if (StringUtils.isEmpty(date) || simpleDateFormat == null) {
return false;
}
try {
simpleDateFormat.parse(date);
return true;
} catch (ParseException e) {
return false;
}
}
/**
* 获取YYYYMM格式
*
* @return
*/
public static String getSdfYearMonth() {
return sdfYearMonth.format(new Date());
}
/**
* 获取YYYYMMDDHHMMSS格式
*
* @return
*/
public static String getSdfTimes() {
return sdfTimes.format(new Date());
}
/**
* 获取YYYY格式
*
* @return
*/
public static String getYear() {
return sdfYear.format(new Date());
}
/**
* 获取MM格式
*
* @return
*/
public static String getMonth() {
return sdfMonth.format(new Date());
}
/**
* 获取dd格式
*
* @return
*/
public static String getToday() {
return sdfd.format(new Date());
}
/**
* 获取YYYY-MM-DD格式
*
* @return
*/
public static String getDay() {
return sdfDay.format(new Date());
}
/**
* 获取YYYYMMDD格式
*
* @return
*/
public static String getDays() {
return sdfDays.format(new Date());
}
/**
* 获取YYYY-MM-DD HH:mm:ss格式
*
* @return
*/
public static String getTime() {
return sdfTime.format(new Date());
}
/**
* 截取日期
*
* @param datetime
* @return
*/
public static String getDate(String datetime) {
return datetime.substring(0, 10);
}
/**
* @param s
* @param e
* @return boolean
* @throws @author fh
* @Title: compareDate
* @Description: TODO(日期比较 如果s > = e 返回true 否则返回false)
*/
public static boolean compareDate(String s, String e) {
if (fomatDate(s) == null || fomatDate(e) == null) {
return false;
}
return fomatDate(s).getTime() >= fomatDate(e).getTime();
}
/**
* 格式化日期
*
* @param date
* @return
*/
public static Date fomatDate(String date) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
return fmt.parse(date);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
/**
* 校验日期是否合法
*
* @param s
* @return
*/
public static boolean isValidDate(String s) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
fmt.parse(s);
return true;
} catch (Exception e) {
// 如果throw java.text.ParseException或者NullPointerException就说明格式不对
return false;
}
}
/**
* @param startTime
* @param endTime
* @return
*/
public static int getDiffYear(String startTime, String endTime) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
// long aa=0;
int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(startTime).getTime()) / (1000 * 60 * 60 * 24))
/ 365);
return years;
} catch (Exception e) {
// 如果throw java.text.ParseException或者NullPointerException就说明格式不对
return 0;
}
}
/**
* <li>功能描述:时间相减得到天数
*
* @param beginDateStr
* @param endDateStr
* @return long
* @author Administrator
*/
public static long getDaySub(String beginDateStr, String endDateStr) {
long day = 0;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate = null;
Date endDate = null;
try {
beginDate = format.parse(beginDateStr);
endDate = format.parse(endDateStr);
} catch (ParseException e) {
e.printStackTrace();
}
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
// System.out.println("相隔的天数="+day);
return day;
}
/**
* 得到n天之后的日期
*
* @param days
* @return
*/
public static String getAfterDayDate(String days) {
int daysInt = Integer.parseInt(days);
// java.util包
Calendar canlendar = Calendar.getInstance();
// 日期减 如果不够减会将月变动
canlendar.add(Calendar.DATE, daysInt);
Date date = canlendar.getTime();
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdfd.format(date);
return dateStr;
}
/**
* 得到n天之后是周几
*
* @param days
* @return
*/
public static String getAfterDayWeek(String days) {
int daysInt = Integer.parseInt(days);
// java.util包
Calendar canlendar = Calendar.getInstance();
// 日期减 如果不够减会将月变动
canlendar.add(Calendar.DATE, daysInt);
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("E");
String dateStr = sdf.format(date);
return dateStr;
}
/**
* 计算年龄生日格式yyyy-MM-dd
*
* @param birth
* @return
*/
public static String getAge(String birth) {
int cYear = Integer.parseInt(getYear());
String[] births = birth.split("-");
int year = Integer.parseInt(births[0]);
if (cYear <= year) {
return "0";
}
int cMonth = Integer.parseInt(getMonth());
int cDay = Integer.parseInt(getToday());
int month = Integer.parseInt(births[1]);
int day = Integer.parseInt(births[2]);
int age = cYear - year;
if (cMonth - month > 0) {
return String.valueOf(age);
}
if (cDay - day > 0) {
return String.valueOf(age);
}
return String.valueOf(age - 1);
}
/**
* 获取本周周一的日期
*/
public static String weekStartDate(String pattern) {
return new DateTime().dayOfWeek().withMinimumValue().toString(pattern);
}
/**
* 获取本周周一的日期
*/
public static Date weekStartDate() {
return new DateTime().dayOfWeek().withMinimumValue().toDate();
}
/**
* 获取本周最后一天
*
* @return
*/
public static String weekEndDate(String pattern) {
return new DateTime().dayOfWeek().withMaximumValue().toString(pattern);
}
/**
* 获取本周最后一天
*
* @return
*/
public static Date weekEndDate() {
return new DateTime().dayOfWeek().withMaximumValue().toDate();
}
/**
* 获取本月开始日期
*
* @param pattern
* @return
*/
public static String monthStartDate(String pattern) {
return new DateTime().dayOfMonth().withMinimumValue().toString(pattern);
}
/**
* 获取本月开始日期
*
* @return
*/
public static Date monthStartDate() {
return new DateTime().dayOfMonth().withMinimumValue().toDate();
}
/**
* 获取本月结束日期
*
* @param pattern
* @return
*/
public static String monthEndDate(String pattern) {
return new DateTime().dayOfMonth().withMaximumValue().toString(pattern);
}
/**
* 获取本月结束日期
*
* @return
*/
public static Date monthEndDate() {
return new DateTime().dayOfMonth().withMaximumValue().toDate();
}
/**
* 格式化日期
*
* @param parseLong
* @param format
* @return
*/
public static String formatDate(long parseLong, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
String date;
try {
date = simpleDateFormat.format(new Date(parseLong));
} catch (Exception e) {
e.printStackTrace();
return null;
}
return date;
}
/**
* 获取前几天的日期,带格式
*
* @param day
* @param format
* @return
*/
public static String getBeforeDate(int day, String format) {
DateTime time = new DateTime().plusDays(-day);
return sdfDay.format(time.toDate());
}
/**
* 计算时间差
*
* @param startTime
* @param endTime
* @param format
* @return
*/
public static long getTimeConsuming(String startTime, String endTime, String format) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
long start = simpleDateFormat.parse(startTime).getTime();
long end = simpleDateFormat.parse(endTime).getTime();
long useTime = end - start;
return useTime < 0 ? 0 : useTime;
}
/**
* 计算年龄
*
* @param birthday yyyy-MM-dd
* @return
*/
public static int getAgeByBirthday(String birthday) {
int age = 0;
String[] days = getDay().split("-");
String[] births = birthday.split("-");
int year = Integer.parseInt(days[0]);
int birthYear = Integer.parseInt(births[0]);
int month = Integer.parseInt(days[1]);
int birthMonth = Integer.parseInt(births[1]);
int day = Integer.parseInt(days[2]);
int birthDay = Integer.parseInt(births[2]);
// 判断年龄是否相等
if (year - birthYear > 0) {
if (month - birthMonth > 0) {
return year - birthYear;
} else if (month - birthMonth == 0) {
if (day - birthDay > 0) {
return year - birthYear;
}
return year - birthYear - 1;
}
return year - birthYear - 1;
}
return age;
}
/**
* 获得上下午标识
*
* @return
*/
public static String getAmPm() {
DateTime dateTime = new DateTime();
int hour = dateTime.getHourOfDay();
if (hour < 13) {
return AM;
}
return PM;
}
}