qa-prevention-gwj/src/main/java/com/zcloud/util/DateSysUtil.java

541 lines
14 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.zcloud.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 说明:日期处理(临时处理时间) 作者zhangyue 官网www.qdkjchina.com
*/
public class DateSysUtil {
private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
private final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
private final static SimpleDateFormat sdfOnlyDay = new SimpleDateFormat("dd");
private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
private final static SimpleDateFormat sdfMDay = new SimpleDateFormat("yyyy-M-d");
private final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
private final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
/**
* 获取YYYY格式
*
* @return
*/
public static String getSdfTimes() {
return sdfTimes.format(new Date());
}
/**
* 获取YYYY格式
*
* @return
*/
public static String getYear(int i) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -i);
return sdfYear.format(c.getTime());
}
public static String getMonth(int i) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -i);
return sdfMonth.format(c.getTime());
}
/**
* 获取DD格式
*
* @return
*/
public static String getOnlyDay(int i) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -i);
return sdfOnlyDay.format(c.getTime());
}
/**
* 获取YYYY-MM-DD格式
*
* @return
*/
public static String getDay(int i) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -i);
return sdfDay.format(c.getTime());
}
public static String MDay() {
return sdfMDay.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());
}
/**
* @Title: compareDate
* @Description: TODO(日期比较如果s>=e 返回true 否则返回false)
* @param s
* @param e
* @return boolean
* @throws @author fh
*/
public static boolean compareDate(String s, String e) {
if (fomatDate(s) == null || fomatDate(e) == null) {
return false;
}
return fomatDate(s).getTime() >= fomatDate(e).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 Date fomatDateTime(String date) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
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) {
return false; // 如果throw java.text.ParseException或者NullPointerException就说明格式不对
}
}
/**
* @param startTime
* @param endTime
* @return
*/
public static int getDiffYear(String startTime, String endTime) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(startTime).getTime()) / (1000 * 60 * 60 * 24))
/ 365);
return years;
} catch (Exception e) {
return 0; // 如果throw java.text.ParseException或者NullPointerException就说明格式不对
}
}
/**
* <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);
} 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);
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;
}
/**
* 按照yyyy-MM-dd HH:mm:ss的格式日期转字符串
*
* @param date
* @return yyyy-MM-dd HH:mm:ss
*/
public static String date2Str(Date date) {
return date2Str(date, "yyyy-MM-dd HH:mm:ss");
}
public static String date3Str(Date date) {
return date2Str(date, "yyyy-M-d");
}
/**
* 按照yyyy-MM-dd HH:mm:ss的格式字符串转日期
*
* @param date
* @return
*/
public static Date str2Date(String date) {
if (Tools.notEmpty(date)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return new Date();
} else {
return null;
}
}
/**
* 把时间根据时、分、秒转换为时间段
*
* @param StrDate
*/
public static String getTimes(String StrDate) {
String resultTimes = "";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date now;
try {
now = new Date();
java.util.Date date = df.parse(StrDate);
long times = now.getTime() - date.getTime();
long day = times / (24 * 60 * 60 * 1000);
long hour = (times / (60 * 60 * 1000) - day * 24);
long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
StringBuffer sb = new StringBuffer();
// sb.append("发表于:");
if (hour > 0) {
sb.append(hour + "小时前");
} else if (min > 0) {
sb.append(min + "分钟前");
} else {
sb.append(sec + "秒前");
}
resultTimes = sb.toString();
} catch (ParseException e) {
e.printStackTrace();
}
return resultTimes;
}
/**
* 按照参数format的格式日期转字符串
*
* @param date
* @param format
* @return
*/
public static String date2Str(Date date, String format) {
if (date != null) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
} else {
return "";
}
}
/**
* 获取当年的第一天
*
* @param year
* @author zhangyue
* @return
*/
public static String getCurrYearFirst(int i) {
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -i);
final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);
cal.set(Calendar.DAY_OF_YEAR, last);
return sdfDay.format(cal.getTime());
}
/**
* 获取当年的最后一天
*
* @param year
* @author zhangyue
* @return
*/
public static String getCurrYearLast(int i) {
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -i);
final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
cal.set(Calendar.DAY_OF_YEAR, last);
return sdfDay.format(cal.getTime());
}
/**
* 获取当前季度第一天
*
* @author zhangyue
* @return
*/
public static String quarterStart(int i) {
Date dBegin = new Date();
Calendar calBegin = Calendar.getInstance();
calBegin.add(Calendar.DAY_OF_MONTH, -i);
// calBegin.setTime(dBegin);
int remainder = calBegin.get(Calendar.MONTH) % 3;
int month = remainder != 0 ? calBegin.get(Calendar.MONTH) - remainder : calBegin.get(Calendar.MONTH);
calBegin.set(Calendar.MONTH, month);
calBegin.set(Calendar.DAY_OF_MONTH, calBegin.getActualMinimum(Calendar.DAY_OF_MONTH));
calBegin.setTime(calBegin.getTime());
return sdfDay.format(calBegin.getTime());
}
/**
* 获取当前季度最后一天
*
* @author zhangyue
* @return
*/
public static String quarterEnd(int i) {
Date dEnd = new Date();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -i);
// calendar.setTime(dEnd);
int remainder = (calendar.get(Calendar.MONTH) + 1) % 3;
int month = remainder != 0 ? calendar.get(Calendar.MONTH) + (3 - remainder) : calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.setTime(calendar.getTime());
return sdfDay.format(calendar.getTime());
}
/**
* 获取本月第一天日期
*
* @return
*/
public static String getMonthFirstDay(int i) {
/*
* String date_str = "2019-02-15";
*/
Calendar cale = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// cale.setTime(formatter.parse(date_str));
Calendar c = Calendar.getInstance();
cale.add(Calendar.DAY_OF_MONTH, -i);
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
String firstDayOfMonth = formatter.format(cale.getTime()); // 当月第一天 2019-02-01
/*
* cale.add(Calendar.MONTH, 1);
*
* cale.set(Calendar.DAY_OF_MONTH, 0);
*
* String lastDayOfMonth = formatter.format(cale.getTime()); // 当月最后一天
* 2019-02-28
*/ return sdfDay.format(cale.getTime());
}
/**
* 获取本月最后一天日期
*
* @return
*/
public static String getMonthEndDay(int i) {
/*
* String date_str = "2019-02-15";
*/
Calendar cale = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// cale.setTime(formatter.parse(date_str));
Calendar c = Calendar.getInstance();
cale.add(Calendar.DAY_OF_MONTH, -i);
/*
* cale.add(Calendar.MONTH, 0);
*
* cale.set(Calendar.DAY_OF_MONTH, 1);
*
* String firstDayOfMonth = formatter.format(cale.getTime()); // 当月第一天
* 2019-02-01
*/
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
String lastDayOfMonth = formatter.format(cale.getTime()); // 当月最后一天 2019-02-28
return sdfDay.format(cale.getTime());
}
public static boolean timeCalendar(Date nowTime, Date amBeginTime, Date amEndTime) {
// 设置当前时间
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
// 设置开始时间
Calendar amBegin = Calendar.getInstance();
amBegin.setTime(amBeginTime);// 上午开始时间
// 设置结束时间
Calendar amEnd = Calendar.getInstance();
amEnd.setTime(amEndTime);// 上午结束时间
// 处于开始时间之后,和结束时间之前的判断
if ((date.after(amBegin) && date.before(amEnd))) {
return true;
} else {
return false;
}
}
/**
* 获取本周的第一天
*
* @return String
**/
public static String getWeekStart(int i) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Calendar cal = Calendar.getInstance();
// Calendar c = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -i);
// 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 new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 00:00:00";
}
/**
* 获取本周的最后一天
*
* @return String
**/
public static String getWeekEnd(int i) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Calendar cal = Calendar.getInstance();
// Calendar c = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -i);
// 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);
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 23:59:59";
}
public static void main(String[] args) throws ParseException {
System.out.println(getCurrYearLast(10));
// System.out.println(getMonth(10));
// System.out.println(getOnlyDay(10));
}
}