package com.aoyang.wxapp.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
* 时间日期操作工具类.
*
* @author hc2900@126.com.
*
*/
public class DateTimeUtils {
private static final int MILLIS_IN_A_MIN = 1000 * 60;
private static final int MILLIS_IN_A_HOUR = MILLIS_IN_A_MIN * 60;
private static final int MILLIS_IN_A_DAY = MILLIS_IN_A_HOUR * 24;
/**yy-MM-dd HH:mm:ss */
public static final String DATETIME_19 = "%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS";
/** yyyyMMddHHmmss */
public static final String DATETIME_14 = "%1$tY%1$tm%1$td%1$tH%1$tM%1$tS";
/** HH:mm:ss */
public static final String TIME_8 = "%1$tH:%1$tM:%1$tS";
/** HHmmss */
public static final String TIME_6 = "%1$tH%1$tM%1$tS";
/** yyyy-MM-dd */
public static final String DATE_10 = "%1$tY-%1$tm-%1$td";
/** yyyyMMdd */
public static final String DATE_8 = "%1$tY%1$tm%1$td";
/**
* 获得当前的日期和时间
*
* @return YYYYMMDDhhmmss格式
*/
public static String getCurrentDataTime14() {
Calendar cal = new GregorianCalendar();
return String.format(DATETIME_14, cal);
}
/**
* 返回月份日期组合
*
* @return MMDD 格式.
*/
public static String getCurrentDataTime4() {
Calendar cal = new GregorianCalendar();
return String.format("%1$tm%1$td", cal);
}
/**
* 获得当前日期时间
*
* @return yyyy-MM-dd HH:mm:ss
*/
public static String getCurrentDataTime19() {
Calendar cal = new GregorianCalendar();
return String.format(DATETIME_19, cal);
}
/**
* 将指定的日期格式化为特定格式的字符串
*
* @param date
* 指定的日期
* @return yyyyMMddHHmmss 格式的时间日期字符串.
*/
public static String formatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyyMMddHHmmss");
String d = sdf.format(date);
return d;
}
/**
* 将指定的日期格式化为特定格式的字符串
*
* @param date
* 指定的日期
* @param pattern
* 格式化字符串
* @return 以pattern指定格式的字符串
*/
public static String dateToString(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(pattern);
return sdf.format(date);
}
/**
* 将指定的日期转换为字符串
*
* @param date 要转换的日期.
* @return yy-MM-dd HH:mm:ss格式的字符串.
*/
public static String dateToString(Date date) {
Assert.notNull(date, "The Date could not be null!!!");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* 时间日期字符串格式转换成 {@link Date}.
*
* @param date
* 字符串格式的时间日期.
*
* @param pattern
* 转换格式字符串.
* @return <code>Date</code>对象,转换异常返回<code>null</code>.
*/
public static Date stringToDate(String date, String pattern) {
Date d = null;
try {
DateFormat sdf = new SimpleDateFormat(pattern);
d = sdf.parse(date);
} catch (ParseException e) {
}
return d;
}
/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/*
* 将时间戳转换为时间
*/
public static String stampToDate(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
/*
* 将时间戳转换为时间
*/
public static String stampToDateYD(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
/**
* 比较两个日期之间的分钟间隔.
*
* @param d1
* @param d2
* @return 两个日期之间的时间差,分钟为单位
*/
public static int minuteDuration(Date d1, Date d2) {
long start = d1.getTime();
long end = d2.getTime();
int duration = (int) (Math.abs(end - start) / MILLIS_IN_A_MIN);
return duration;
}
/**
* 返回两个日期之间的天数差
*
* @param startDate
* 起始日期
* @param endDate
* 结束日期
* @return 两个日期之间的天数
*/
public static int dayDuration(Date startDate, Date endDate) {
Date end = (Date) endDate.clone();
Date start = (Date) startDate.clone();
resetTime(start);
resetTime(end);
return (int) Math.floor((end.getTime() - start.getTime())
/ MILLIS_IN_A_DAY);
}
/**
* 比较两个日期是否为同一天
*
* @param date1
* @param date2
* @return 如果是同一天,返回true,否则返回false;
*/
public static boolean isTheSameDay(Date date1, Date date2) {
Date d1 = (Date) date1.clone();
Date d2 = (Date) date2.clone();
resetTime(d1);
resetTime(d2);
return d1.getTime() == d2.getTime();
}
/**
* 指定的日期上加上指定的天数
*
* @param date
* 基准日期
* @param days
* 要加上的天数
* @return
*/
public static Date addDate(Date date, int days) {
Date d = (Date) date.clone();
Long duration = d.getTime() + days * MILLIS_IN_A_DAY;
d.setTime(duration.intValue());
return d;
}
/**
* 指定的日期上加上指定的天数
*
* @param date
* 基准日期
* @param days
* 要加上的天数
* @return
*/
public static Date addHour(Date date, int hours) {
Date d = (Date) date.clone();
d.setTime(d.getTime() + hours * MILLIS_IN_A_HOUR);
return d;
}
public static Date add_Date( int days) {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, days);
return c.getTime();
}
/**
* 重设时分秒
*
* @param date
* 要重新设置时分秒的日期
*/
public static void resetTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
date.setTime(c.getTime().getTime());
}
/**
* 日期比较.
*
* @param compared
* 要比较的日期.
* @param baseDate
* 基准日期.
* @return 比较的日期晚于基准日期返回>0,比较的日期早于基准日期返回-1,两个日期相等返回0;
*/
public static int compare(Date compared, Date baseDate) {
return (int) (baseDate.getTime() - compared.getTime());
}
/**
* 比较指定日期是否在两个日期之间.
*
* @param compared
* 要比较的日期.
* @param baseStart
* 起始日期.
* @param baseEnd
* 结束日期.
* @return
*/
public static boolean dayBetween(Date compared, Date baseStart, Date baseEnd) {
Assert.notNull(compared);
Assert.notNull(baseStart);
Assert.notNull(baseEnd);
return compared.getTime() >= baseStart.getTime()
&& compared.getTime() <= baseEnd.getTime();
}
/**
* 比较两个时间字符串之间的秒差值
* @param dateStr1
* "yyyy-MM-dd HH:mm:ss"
* @param dataStr2
* "yyyy-MM-dd HH:mm:ss"
* @return
*/
public static long secondDuration(String dateStr1, String dataStr2){
if(!StringUtils.isEmpty(dateStr1) && !StringUtils.isEmpty(dataStr2)){
long start = StrToDate(dateStr1).getTime();
long end = StrToDate(dataStr2).getTime();
return (Math.abs(end - start) / 1000);
}
return 0;
}
public static String getFindDateSunday(String date) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date time=sdf.parse(date);
cal.setTime(time);
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if(1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);
int day = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DATE, cal.getFirstDayOfWeek()-day);
cal.add(Calendar.DATE, 6);
System.out.println( sdf.format(cal.getTime()));
return sdf.format(cal.getTime());
}
public static ArrayList<String> getDates(Date date, int intervals) throws Exception{
ArrayList<String> pastDaysList = new ArrayList<>();
for (int i = (intervals-1); i >=0; i--) {
pastDaysList.add(getPastDate(date,i));
}
return pastDaysList;
}
/**
* 获取过去第几天的日期
*
* @param past
* @return
*/
public static String getPastDate(Date date,int past) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
return result;
}
/**
* 获取某日前n个月
* @param date
* @param month
* @return
*/
public static String getPastMonth(Date date,int month) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - month);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
String result = format.format(today);
return result;
}
/**
* 获取某月最后一天日期
* @param date
* @return
* @throws Exception
*/
public static String getMonthLastDay(String date) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date parseDate = sdf.parse(date);
Calendar cal = Calendar.getInstance();
cal.setTime(parseDate);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.roll(Calendar.DAY_OF_MONTH, -1);
return sdf.format(cal.getTime());
}
}
第二个工具类
/**
* Project Name: 澳洋信息系统微信管理平台
* Date:2016年10月10日
* Copyright(c) 2016 All Rights Reserved
*/
package com.aoyang.wxapp.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 日期处理工具类.
*/
public class DateUtil {
/**
* 获取YYYY格式
*
* @return
*/
public static String getSdfTimes() {
DateFormat df = new SimpleDateFormat("yyyy");
return df.format(new Date());
}
/**
* 获取YYYY格式
*
* @return
*/
public static String getYear() {
return new SimpleDateFormat("yyyy").format(new Date());
}
/**
* 获取YYYY-MM-DD格式
*
* @return
*/
public static String getDay() {
return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}
/**
* 获取YYYYMMDD格式
*
* @return
*/
public static String getDays() {
return new SimpleDateFormat("yyyyMMdd").format(new Date());
}
/**
* 获取YYYY-MM-DD HH:mm:ss格式
*
* @return
*/
public static String getTime() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
/**
* @Title: compareDate
* @Description: (日期比较,如果s>=e 返回true 否则返回false)
* @param s
* @param e
* @return boolean
* @throws
* @author fh
* false时可能是因为某一个参数解析错误,不建议使用
*/
@Deprecated
public static boolean compareDate(String s, String e) {
Date sDate = fomatDate(s);
Date eDate = fomatDate(e);
if (sDate == null || eDate == null) {
return false;
}
return sDate.getTime() >= eDate.getTime();
}
/**
* 格式化日期
*
* @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;
}
}
/**
* 校验日期是否合法
*
* @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;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date beginDate = null;
java.util.Date endDate = null;
try {
beginDate = format.parse(beginDateStr);
endDate = format.parse(endDateStr);
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000)+1;
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
/**
* 得到n天之后的日期
*
* @param days
* @return
*/
public static String getAfterDayDate(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance(); // java.util包
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);
Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("E");
String dateStr = sdf.format(date);
return dateStr;
}
/**
* 获取过去或者未来 任意天内的日期数组
*
* @param intervals
* intervals天内
* @return 日期数组
*/
public static ArrayList<Date> getPastDateList(int intervals) {
ArrayList<Date> pastDaysList = new ArrayList<>();
for (int i = intervals; i > 0; i--) {
pastDaysList.add(getPastDate(i));
}
return pastDaysList;
}
/**
* 获取过去第几天的日期
*
* @param past
* @return
*/
public static Date getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
return calendar.getTime();
}
/**
* @author daixiongyan 根据年、月获取当月最后一天
* @date 2019-1-14
* @param year
* @param month
* @return
*/
public static String getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
// 设置年份
cal.set(Calendar.YEAR, year);
// 设置月份
cal.set(Calendar.MONTH, month - 1);
// 获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);
// 设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
}
/**
* 获取上个月的起止日期
* @author yangd
* @return
*/
public static PageData getFirstLastDayOfLastMonth() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(lastMonthMaxDay);
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay);
//按格式输出
String lastDayOfLastMonth = sdf.format(c.getTime()); //上月最后一天
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01");
String firstDayOfLastMonth = sdf2.format(c.getTime()); //上月第一天
PageData pd = new PageData();
pd.put("FIRSTDAYOFLASTMONTH", firstDayOfLastMonth);
pd.put("LASTDAYOFLASTMONTH", lastDayOfLastMonth);
return pd;
}
/**
* 获取本月的起止日期
* @author yangd
* @return
*/
public static PageData getFirstLastDayOfThisMonth() {
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int thisMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(thisMonthMaxDay);
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), thisMonthMaxDay);
//按格式输出
String lastDayOfThisMonth = sdf.format(c.getTime());
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01");
String firstDayOfThisMonth = sdf2.format(c.getTime());
PageData pd = new PageData();
pd.put("FIRSTDAYOFTHISMONTH", firstDayOfThisMonth);
pd.put("LASTDAYOFTHISMONTH", lastDayOfThisMonth);
return pd;
}
/**
* 获取两个日期之间的差值
* @author yangd
* @param dateEnd
* @param dateStart
* @return PageData
*/
public static PageData timesBetween(String dateEnd,String dateStart) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
long diff = 0;
try {
Date endDate= df.parse(dateEnd);
Date startDate= df.parse(dateStart);
long etime = endDate.getTime();
long stime = startDate.getTime();
if(etime>stime){
diff = etime - stime;
}else{
PageData pd = new PageData();
boolean isOutTime = true;
pd.put("Day", "0");
pd.put("Hour", "0");
pd.put("Min", "0");
pd.put("Sec", "0");
pd.put("isOutTime", isOutTime);
return pd;
}
day = diff/(24*60*60*1000);
hour = diff/(60*60*1000) - day*24;
min = diff/(60*1000) - day*24*60 - hour*60;
sec = diff/1000-day*24*60*60-hour*60*60-min*60;
} catch (ParseException e) {
return null;
}
PageData timePd = new PageData();
timePd.put("Day", day);
timePd.put("Hour", hour);
timePd.put("Min", min);
timePd.put("Sec", sec);
return timePd;
}
/**
* 获取两个日期之间的较小的日期
* @param t1
* @param t2
* @return
*/
public static String getMinTime(String t1,String t2){
if(t1.compareTo(t2)<0) {
return t1;
}else {
return t2;
}
}
/**
* 获取x分钟后的时间
* @author yangd
* @param minuteCount
* @return PageData
*/
public static String getMinuteAfter(int minuteCount){
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, minuteCount);// 5分钟之前的时间
Date afterTime = nowTime.getTime();
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(afterTime);
}
/**
* 获取今天的开始时间(00:00:00)
* @author yangd
* @return String
*/
public static String getTodayFirstMoment() {
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(time);
date += " 00:00:00";
return date;
}
/**
* 获取今天的结束时间(23:59:59)
* @author yangd
* @return String
*/
public static String getTodayLastMoment() {
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(time);
date += " 23:59:59";
return date;
}
/**
* 获取昨天的开始时间(00:00:00)
* @author yangd
* @return String
*/
public static String getYesterFirstMoment() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(time);
date += " 00:00:00";
return date;
}
/**
* 获取昨天的结束时间(23:59:59)
* @author yangd
* @return String
*/
public static String getYesterLastMoment() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(time);
date += " 23:59:59";
return date;
}
/**
* 获取当年第一天
* @author yangd
* @return String
*/
public static String getFirstOfCurrYear() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
int currentYear = cal.get(Calendar.YEAR);
cal.clear();
cal.set(Calendar.YEAR, currentYear);
Date currYearFirst = cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(currYearFirst);
}
/**
* 获取昨天是当年的第多少天
* @author yangd
* @return int
*/
public static int yesterNumOfYear() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
return cal.get(Calendar.DAY_OF_YEAR);
}
/**
* 获取昨天的日期 yyyy-MM-dd
* @author yangd
* return String
*/
public static String getLastDate() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(time);
}
/**
* 获取指定日期的前后x天的日期
* @author yangd
* @param time
* @param differ
* @param isAdd
* @return
*/
public static String getDayByNowDate(String time,int differ,boolean isAdd){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
Date date=null;
try {
date = sdf.parse(time);
} catch (ParseException e) {
return null;
}
calendar.setTime(date);
int day=calendar.get(Calendar.DATE);
if(isAdd){
calendar.set(Calendar.DATE,day+differ);
}else{
calendar.set(Calendar.DATE,day-differ);
}
return sdf.format(calendar.getTime());
}
/**
* 获取昨天
* @return yyyy-MM-dd
*/
public static String getYesterday() {
Calendar calendar = new GregorianCalendar();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
calendar.add(Calendar.DATE, -1);
return formatter.format(calendar.getTime());
}
}