import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil {
private static final Logger LOGGER = Logger.getLogger(DateUtil.class);
public static final long ONE_MINUTE = 60;
public static final long ONE_HOUR = 3600;
public static final long ONE_DAY = 86400;
public static final long ONE_MONTH = 2592000;
public static final long ONE_YEAR = 31104000;
/**
* 日期转化格式:yyyy-MM-dd HH:mm:ss
*/
public static final String DATEFORMAT_PATTERN_ONE= "yyyy-MM-dd HH:mm:ss";
/**
* 日期转化格式:yyyy-MM-dd HH-mm-ss
*/
public static final String DATEFORMAT_PATTERN_TWO= "yyyy-MM-dd HH-mm-ss";
/**
* 日期转化格式:yyyy-MM-dd
*/
public static final String DATEFORMAT_PATTERN_THREE= "yyyy.MM.dd";
/**
* 日期转化格式:yyyy年MM月dd日
*/
public static final String DATEFORMAT_PATTERN_FOUR= "yyyy年MM月dd日";
/**
* 日期转化格式:20160201
*/
public static final String DATEFORMAT_PATTERN_FIVE = "yyyyMMdd";
public static final String DATEFORMAT_PATTERN_SIX = "yyyyMMddHHmmss";
public static final DateFormat DATE_NUMBER_FM = new SimpleDateFormat(DATEFORMAT_PATTERN_FIVE);
public static final String DATEFORMAT_PATTERN_SIGN = "yyyy年MM月dd日 HH:mm:ss";
public static final DateFormat DATE_SIGN_FM = new SimpleDateFormat(DATEFORMAT_PATTERN_SIGN);
public static final DateFormat SDF_THREE = new SimpleDateFormat(DATEFORMAT_PATTERN_THREE);
/**
*
* @return yyyy-mm-dd
* 2012-12-25
*/
public static String getDate() {
String day;
if(Integer.parseInt(getDay())<10){
day = "0"+getDay();
}else{
day = getDay();
}
String month;
if(Integer.parseInt(getMonth())< 10){
month = "0"+getMonth();
}else{
month = getMonth();
}
String data = getYear() + "-" + month + "-" + day;
return data;
}
public static String getMM(){
return getMonth();
}
/**
* @param format
* @return
* yyyy年MM月dd HH:mm
* MM-dd HH:mm 2012-12-25
*
*/
public static String getDate(String format) {
SimpleDateFormat simple = new SimpleDateFormat(format);
return simple.format(Calendar.getInstance().getTime());
}
/**
*
* @return yyyy-MM-dd HH:mm
* 2012-12-29 23:47
*/
public static String getDateAndMinute() {
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return simple.format(Calendar.getInstance().getTime());
}
/**
*
* @return
* yyyy-MM-dd HH:mm:ss
* 2012-12-29 23:47:36
*/
public static String getFullDate() {
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simple.format(Calendar.getInstance().getTime());
}
/**
* 距离今天多久
* @param date
* @return
*
*/
public static String fromToday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long time = date.getTime() / 1000;
long now = new Date().getTime() / 1000;
long ago = now - time;
if (ago <= ONE_HOUR)
return ago / ONE_MINUTE + "分钟前";
else if (ago <= ONE_DAY)
return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE)
+ "分钟前";
else if (ago <= ONE_DAY * 2)
return "昨天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
else if (ago <= ONE_DAY * 3)
return "前天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
else if (ago <= ONE_MONTH) {
long day = ago / ONE_DAY;
return day + "天前" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
} else if (ago <= ONE_YEAR) {
long month = ago / ONE_MONTH;
long day = ago % ONE_MONTH / ONE_DAY;
return month + "个月" + day + "天前"
+ calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
} else {
long year = ago / ONE_YEAR;
int month = calendar.get(Calendar.MONTH) + 1;// JANUARY which is 0 so month+1
return year + "年前" + month + "月" + calendar.get(Calendar.DATE)
+ "日";
}
}
/**
* 距离截止日期还有多长时间
*
* @param date
* @return
*/
public static String fromDeadline(Date date) {
long deadline = date.getTime() / 1000;
long now = (new Date().getTime()) / 1000;
long remain = deadline - now;
if (remain <= ONE_HOUR)
return "只剩下" + remain / ONE_MINUTE + "分钟";
else if (remain <= ONE_DAY)
return "只剩下" + remain / ONE_HOUR + "小时"
+ (remain % ONE_HOUR / ONE_MINUTE) + "分钟";
else {
long day = remain / ONE_DAY;
long hour = remain % ONE_DAY / ONE_HOUR;
long minute = remain % ONE_DAY % ONE_HOUR / ONE_MINUTE;
return "只剩下" + day + "天" + hour + "小时" + minute + "分钟";
}
}
/**
* 距离今天的绝对时间
*
* @param date
* @return
*/
public static String toToday(Date date) {
long time = date.getTime() / 1000;
long now = (new Date().getTime()) / 1000;
long ago = now - time;
if (ago <= ONE_HOUR)
return ago / ONE_MINUTE + "分钟";
else if (ago <= ONE_DAY)
return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE) + "分钟";
else if (ago <= ONE_DAY * 2)
return "昨天" + (ago - ONE_DAY) / ONE_HOUR + "点" + (ago - ONE_DAY)
% ONE_HOUR / ONE_MINUTE + "分";
else if (ago <= ONE_DAY * 3) {
long hour = ago - ONE_DAY * 2;
return "前天" + hour / ONE_HOUR + "点" + hour % ONE_HOUR / ONE_MINUTE
+ "分";
} else if (ago <= ONE_MONTH) {
long day = ago / ONE_DAY;
long hour = ago % ONE_DAY / ONE_HOUR;
long minute = ago % ONE_DAY % ONE_HOUR / ONE_MINUTE;
return day + "天前" + hour + "点" + minute + "分";
} else if (ago <= ONE_YEAR) {
long month = ago / ONE_MONTH;
long day = ago % ONE_MONTH / ONE_DAY;
long hour = ago % ONE_MONTH % ONE_DAY / ONE_HOUR;
long minute = ago % ONE_MONTH % ONE_DAY % ONE_HOUR / ONE_MINUTE;
return month + "个月" + day + "天" + hour + "点" + minute + "分前";
} else {
long year = ago / ONE_YEAR;
long month = ago % ONE_YEAR / ONE_MONTH;
long day = ago % ONE_YEAR % ONE_MONTH / ONE_DAY;
return year + "年前" + month + "月" + day + "天";
}
}
public static String getYear() {
return Calendar.getInstance().get(Calendar.YEAR) + "";
}
public static String getMonth() {
int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
return month + "";
}
public static String getDay() {
return Calendar.getInstance().get(Calendar.DATE) + "";
}
public static String get24Hour() {
return Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + "";
}
public static String getMinute() {
return Calendar.getInstance().get(Calendar.MINUTE) + "";
}
public static String getSecond() {
return Calendar.getInstance().get(Calendar.SECOND) + "";
}
public static void main(String[] args) throws ParseException {
// String deadline = "2012-12-30 12:45:59";
// Date date = new Date();
// SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// date = simple.parse(deadline);
// System.out.println(DateUtil.fromDeadline(date));
//
// String before = "2012-12-12 0:0:59";
// date = simple.parse(before);
// System.out.println(DateUtil.fromToday(date));
//
// System.out.println(DateUtil.getFullDate());
// System.out.println(DateUtil.getDate());
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEE");
//
// Date currentDate = new Date();
//
// // 比如今天是2012-12-25
// System.out.println("今天的日期: " + sdf.format(currentDate));
//
// List<String> dayList = new ArrayList<String>();
// System.out.println(dayList);
//
// System.out.println((Integer.parseInt(DateUtil.getYear())+1)+"-"+DateUtil.getMonth()+"-"+
// DateUtil.getDay()+" "+DateUtil.get24Hour()+":"+DateUtil.getMinute()
// +":"+DateUtil.getSecond());
// String osName = System.getProperty("os.name");
//
// String user = System.getProperty("user.name");
//
// System.out.println("当前操作系统是:" + osName);
//
// System.out.println("当前用户是:" + user);
// /*
// * System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
// * currentTimeMillis方法public static long currentTimeMillis()该方法的作用是返回当前的计算机时间,
// * 时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
// * */
// long currentTime = System.currentTimeMillis();
//
// System.out.println(currentTime);
//
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy年-MM月dd日-HH时mm分ss秒");
//
// Date d = new Date(currentTime);
//
// System.out.println(formatter.format(d));
//
// System.out.println("********************");
//
// System.out.println(getWeek("2016-01-03", -3, -2));
//
// System.out.println(getWeek("2016-01-03", -2, -1));
//
// System.out.println(getWeek("2016-01-03", -1, 0));
Date d2 = new Date();
d2.setDate(2);
System.out.println(d2.getTime());
}
/**
* 获取当前日期是星期几<br>
*
* @param date
* @return 当前日期是星期几
*/
public static String getWeekOfDate(String date) {
Date dt = null;
try {
dt = SDF_THREE.parse(date);
} catch (ParseException e1) {
e1.printStackTrace();
}
String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
//获取周时间(根据参数获取上上周s=-3e=-2,上周s=-2e=-1,本周s=-1e=0)
public static List<String> getWeek(String date,int s,int e) {
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date da = null;
try {
da = sdf.parse(date);
} catch (ParseException e1) {
e1.printStackTrace();
}
List<String> strList = new ArrayList<String>();
Calendar cal1 = Calendar.getInstance();
Calendar c = Calendar.getInstance();
c.setTime(da);
cal1.setTime(da);
int n = s;
cal1.add(Calendar.DATE, n*7);//想周几,这里就传几Calendar.MONDAY(TUESDAY...)
cal1.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
c.add(Calendar.WEEK_OF_MONTH, e);
String monday = new SimpleDateFormat("yyyy-MM-dd").format(cal1.getTime());
strList.add(monday);
String sunday = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
strList.add(sunday);
return strList;
}
public static String getTime(String user_time) {
String re_time = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d;
try {
d = sdf.parse(user_time);
long l = d.getTime();
String str = String.valueOf(l);
re_time = str.substring(0, 10);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return re_time;
}
public static String convertDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str=null;
try {
Date datever=sdf.parse(date);
int i = datever.compareTo(new Date());
if (i == 1) {
System.out.println("输入日期超过了当今日期");
return null;
} else if (i == -1) {
datever.setTime(datever.getTime()-24*60*60*1000);
str=sdf.format(datever);
}
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 返回今天的数值形式20150201
*
* @return
* @author 陈滔 2016年3月11日
*/
public static String getTodayStr() {
return DATE_NUMBER_FM.format(new Date());
}
/**
* 根据传入的格式返回日期的字符形式
*
* @return
* @author 陈滔 2016年3月11日
*/
public static String getDateString(String dateFormat, Date date) {
if (StringUtils.isBlank(dateFormat) || date == null) {
return null;
}
DateFormat df = new SimpleDateFormat(dateFormat);
return getDateString(df, date);
}
/**
* 根据传入的格式类返回日期的字符形式
*
* @param df
* @param date
* @return
* @author 陈滔 2016年3月14日
*/
public static String getDateString(DateFormat df, Date date) {
if (df == null || date == null) {
return null;
}
return df.format(date);
}
/**
* 计算到期天数(到期日期时间戳-系统日期时间戳)/天
* @author zhaoht
*/
public static int getDueDays(String expdate){
String strDateFormat = expdate.length()> 10 ? "yyyy-MM-dd HH:mm:ss":"yyyy-MM-dd";
DateFormat df = new SimpleDateFormat(strDateFormat);
int days = 0;
try {
Date enddate = df.parse(expdate);
BigDecimal time = BigDecimal.valueOf(enddate.getTime()).subtract((BigDecimal.valueOf(new Date().getTime())));
//远离0的四舍五入
days = time.divide(BigDecimal.valueOf(1000*60*60*24),0,BigDecimal.ROUND_UP).intValue();
} catch (ParseException e){
LOGGER.error("剩余天数:日期格式转换异常!");
}
return days;
}
/**
* 字符串日期格式化: eg: yyyy-MM-dd HH:mm:ss -> yyyy年MM月dd日
* @author zhaoht
*/
public static String strDateFormat (String source_format,String target_format,String strdate) {
DateFormat df = new SimpleDateFormat(source_format);
Date date = null;
try {
date = df.parse(strdate);
} catch (ParseException e) {
LOGGER.error("日期格式转换异常!");
}
df = new SimpleDateFormat(target_format);
return df.format(date);
}
public static Date getDate(String timeString, String dateFormat)
throws ParseException {
if (StringUtils.isEmpty(timeString) || StringUtils.isEmpty(dateFormat)) {
LOGGER.error("传入时间:" + timeString + " 日期格式:" + dateFormat + " 为空");
return null;
}
//LOGGER.debug("传入时间:" + timeString + " 日期格式:" + dateFormat);
return getDate(timeString, new SimpleDateFormat(dateFormat));
}
public static Date getDate(String timeString, SimpleDateFormat dateFormat)
throws ParseException {
if (StringUtils.isEmpty(timeString) || dateFormat==null) {
LOGGER.error("传入时间:" + timeString + " 日期格式:" + dateFormat + " 为空");
return null;
}
return dateFormat.parse(timeString);
}
/**
* 检查传入时间是否超过了现在时间
* @param date
* @return
* @author 陈滔
* 2016年2月2日
*/
public static boolean isOverNow(Date date){
if(date == null){
return false;
}
return date.getTime() > System.currentTimeMillis();
}
/**
* 将符合日期格式的字符串转化成时间戳
* @param str: 2015-04-22 16:53:20
* @param formatePattern :yyyy-MM-dd HH:mm:ss
* @return
*/
public static long dateStrToTimestamp(String str, String formatePattern) {
long timeStamp = 0L;
try {
Date date = DateUtils.parseDate(str,new String[] { formatePattern });
timeStamp = date.getTime();
} catch (ParseException e) {
LOGGER.error("日期字符串错误",e);
}
return timeStamp;
}
/**
* 判断指定的日期与现在的日期是否相差超过传入时间,如果超过则返回true,否则返回false
* @param oldDate
* @author chentao
* @return
*/
public static boolean isOverDay(Date oldDate,int days) {
if(oldDate==null||days==0){
return false;
}
long oldTimes = oldDate.getTime();
long currentTimes = System.currentTimeMillis();
long gapTimes = 1000l*60*60*24*days;
return oldTimes + gapTimes < currentTimes? true : false;
}
public static Map<String,String> getFirstAndLastOfWeek(Date date) throws ParseException {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == 1) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.set(Calendar.AM_PM,Calendar.AM);
cal.add(Calendar.DAY_OF_WEEK, d);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,1);
// 所在周开始日期
Map<String,String> timeMap = new HashMap<>();
timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
cal.add(Calendar.DAY_OF_WEEK, 6);
// 所在周结束日期
cal.set(Calendar.AM_PM,Calendar.PM);
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
return timeMap;
}
public static Map<String,String> getFirstAndLastOfDay(Date date) throws ParseException {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.AM_PM,Calendar.AM);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,1);
// 所在周开始日期
Map<String,String> timeMap = new HashMap<>();
timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
// 所在周结束日期
cal.set(Calendar.AM_PM,Calendar.PM);
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
return timeMap;
}
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
public static Map<String, String> getPreviousDateDuration(Map<String, Object> params) throws ParseException {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int betweenDays =daysBetween(sdf.parse(params.get("startTimeStamp").toString()),sdf.parse(params.get("endTimeStamp").toString()));
int endMinus = 0;
int startMinus = 0;
if(betweenDays == 0){
endMinus=1;
startMinus=1;
}else{
endMinus=1;
startMinus=betweenDays+1;
}
cal.setTime(sdf.parse(params.get("startTimeStamp").toString()));
cal.set(Calendar.AM_PM,Calendar.PM);
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
cal.add(Calendar.DATE, -endMinus);
// 所在周结束日期
Map<String,String> timeMap = new HashMap<>();
timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
// 所在周开始日期
cal.add(Calendar.DATE, -startMinus+endMinus);
cal.set(Calendar.AM_PM,Calendar.AM);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,1);
timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
return timeMap;
}
/**
* 日前推算
* @param diff 今天日期 0 获取昨天-1 获取明天+1
* @param date 日期
* @return yyyy-MM-dd
*/
public static String getOtherDay(String date,int diff){
Calendar ca = Calendar.getInstance();
try{
Date da = SDF_THREE.parse(date);
ca.setTime(da);
ca.add(Calendar.DATE, diff);
}catch (Exception e){
e.printStackTrace();
return "解析错误";
}
return SDF_THREE.format(ca.getTime());
}
//获取当天的开始时间
public static java.util.Date getDayBegin() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
//获取当天的结束时间
public static java.util.Date getDayEnd() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
//获取昨天的开始时间
public static Date getBeginDayOfYesterday() {
Calendar cal = new GregorianCalendar();
cal.setTime(getDayBegin());
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
//获取昨天的结束时间
public static Date getEndDayOfYesterDay() {
Calendar cal = new GregorianCalendar();
cal.setTime(getDayEnd());
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
//获取明天的开始时间
public static Date getBeginDayOfTomorrow() {
Calendar cal = new GregorianCalendar();
cal.setTime(getDayBegin());
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
//获取明天的结束时间
public static Date getEndDayOfTomorrow() {
Calendar cal = new GregorianCalendar();
cal.setTime(getDayEnd());
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
//获取本周的开始时间
@SuppressWarnings("unused")
public static Date getBeginDayOfWeek(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek);
return getDayStartTime(cal.getTime());
}
//获取本周的结束时间
public static Date getEndDayOfWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(getBeginDayOfWeek(date));
cal.add(Calendar.DAY_OF_WEEK, 6);
Date weekEndSta = cal.getTime();
return getDayEndTime(weekEndSta);
}
//获取上周的开始时间
@SuppressWarnings("unused")
public static Date getBeginDayOfLastWeek(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek - 7);
return getDayStartTime(cal.getTime());
}
//获取上周的结束时间
public static Date getEndDayOfLastWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(getBeginDayOfLastWeek(date));
cal.add(Calendar.DAY_OF_WEEK, 6);
Date weekEndSta = cal.getTime();
return getDayEndTime(weekEndSta);
}
//获取本月的开始时间
public static Date getBeginDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth(date) - 1, 1);
return getDayStartTime(calendar.getTime());
}
//获取本月的结束时间
public static Date getEndDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth(date) - 1, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(), getNowMonth(date) - 1, day);
return getDayEndTime(calendar.getTime());
}
//获取上月的开始时间
public static Date getBeginDayOfLastMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth(date) - 2, 1);
return getDayStartTime(calendar.getTime());
}
//获取上月的结束时间
public static Date getEndDayOfLastMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth(date) - 2, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(), getNowMonth(date) - 2, day);
return getDayEndTime(calendar.getTime());
}
public static Date getBeginNearHalfAYear(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE,-182);
return getDayStartTime(cal.getTime());
}
public static Date getEndNearHalfAYear(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getDayEndTime(cal.getTime());
}
//获取本年的开始时间
public static java.util.Date getBeginDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
// cal.set
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
return getDayStartTime(cal.getTime());
}
//获取本年的结束时间
public static java.util.Date getEndDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DATE, 31);
return getDayEndTime(cal.getTime());
}
//获取某个日期的开始时间
public static Timestamp getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if(null != d) calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTimeInMillis());
}
//获取某个日期的结束时间
public static Timestamp getDayEndTime(Date d) {
Calendar calendar = Calendar.getInstance();
if(null != d) calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.set(Calendar.MILLISECOND, 999);
return new Timestamp(calendar.getTimeInMillis());
}
//获取今年是哪一年
public static Integer getNowYear() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
//获取本月是哪一月
public static int getNowMonth(Date date) {
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return gc.get(2) + 1;
}
//两个日期相减得到的天数
public static int getDiffDays(Date beginDate, Date endDate) {
if (beginDate == null || endDate == null) {
throw new IllegalArgumentException("getDiffDays param is null!");
}
long diff = (endDate.getTime() - beginDate.getTime())
/ (1000 * 60 * 60 * 24);
int days = new Long(diff).intValue();
return days;
}
//两个日期相减得到的毫秒数
public static long dateDiff(Date beginDate, Date endDate) {
long date1ms = beginDate.getTime();
long date2ms = endDate.getTime();
return date2ms - date1ms;
}
//获取两个日期中的最大日期
public static Date max(Date beginDate, Date endDate) {
if (beginDate == null) {
return endDate;
}
if (endDate == null) {
return beginDate;
}
if (beginDate.after(endDate)) {
return beginDate;
}
return endDate;
}
//获取两个日期中的最小日期
public static Date min(Date beginDate, Date endDate) {
if (beginDate == null) {
return endDate;
}
if (endDate == null) {
return beginDate;
}
if (beginDate.after(endDate)) {
return endDate;
}
return beginDate;
}
//返回某月该季度的第一个月
public static Date getFirstSeasonDate(Date date) {
final int[] SEASON = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int sean = SEASON[cal.get(Calendar.MONTH)];
cal.set(Calendar.MONTH, sean * 3 - 3);
return cal.getTime();
}
//返回某个日期下几天的日期
public static Date getNextDay(Date date, int i) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);
return cal.getTime();
}
//返回某个日期前几天的日期
public static Date getFrontDay(Date date, int i) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);
return cal.getTime();
}
//获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List getTimeList(int beginYear, int beginMonth, int endYear,
int endMonth, int k) {
List list = new ArrayList();
if (beginYear == endYear) {
for (int j = beginMonth; j <= endMonth; j++) {
list.add(getTimeList(beginYear, j, k));
}
} else {
{
for (int j = beginMonth; j < 12; j++) {
list.add(getTimeList(beginYear, j, k));
}
for (int i = beginYear + 1; i < endYear; i++) {
for (int j = 0; j < 12; j++) {
list.add(getTimeList(i, j, k));
}
}
for (int j = 0; j <= endMonth; j++) {
list.add(getTimeList(endYear, j, k));
}
}
}
return list;
}
//获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List getTimeList(int beginYear, int beginMonth, int k) {
List list = new ArrayList();
Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1);
int max = begincal.getActualMaximum(Calendar.DATE);
for (int i = 1; i < max; i = i + k) {
list.add(begincal.getTime());
begincal.add(Calendar.DATE, k);
}
begincal = new GregorianCalendar(beginYear, beginMonth, max);
list.add(begincal.getTime());
return list;
}
public static Date getCurrentWeekStartDate(){
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Date date = cal.getTime();
return date;
}
public static Date getCurrentMonthStartDate(){
Calendar cal = Calendar.getInstance();//获取当前日期
cal.add(Calendar.MONTH,-1);
cal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
Date date = cal.getTime();
return date;
}
public static Date getCurrentHalfYearStartDate(){
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR,-163);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
Date date = cal.getTime();
return date;
}
public static Date getTodayStartDate(){
Calendar cal=Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
Date date = cal.getTime();
return date;
}
public static Date getTodayDateByParam(int hourOfDay,int minute){
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date now=new Date();
String nowString=simpleDateFormat.format(now);
String dateArray[]=nowString.split("-");
cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
Date todayTime=cal.getTime();
return todayTime;
}
public static Date getSpecialDateByParam(Object dateString,int hourOfDay,int minute){
Calendar cal = Calendar.getInstance();
String dateArray[]=dateString.toString().split("-");
cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
Date specialTime=cal.getTime();
return specialTime;
}
public static Date getYesterdayDateByParam(int hourOfDay,int minute){
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date now=new Date();
String nowString=simpleDateFormat.format(now);
String dateArray[]=nowString.split("-");
cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
cal.add(Calendar.DAY_OF_MONTH,-1);
Date todayTime=cal.getTime();
return todayTime;
}
public static Date getSpecailDateBeforeDateByParam(Object dateString,int hourOfDay,int minute){
Calendar cal = Calendar.getInstance();
String dateArray[]=dateString.toString().split("-");
cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
cal.add(Calendar.DAY_OF_MONTH,-1);
Date specialTime=cal.getTime();
return specialTime;
}
public static Date getSpecailDateAfterDateByParam(Object dateString,int hourOfDay,int minute){
Calendar cal = Calendar.getInstance();
String dateArray[]=dateString.toString().split("-");
cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
cal.add(Calendar.DAY_OF_MONTH,1);
Date specialTime=cal.getTime();
return specialTime;
}
}