日期时间处理

最近搞一个关于事件趋势的工程,然后对于日期的处理整理如下:


public class ZtDateUtil {

private static final SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd");

public static String getCurrentTime(Date date, int day) {
Calendar cal = Calendar.getInstance();// 使用默认时区和语言环境获得一个日历
cal.setTime(date);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 通过格式化输出日期
cal.add(Calendar.DAY_OF_MONTH, day);// 取当前日期
return format.format(cal.getTime());
}

/*时间String转Date*/
public static Date converToDate(String dateStr) {
if (!StringUtils.isBlank(dateStr)){
try {
return formate.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}

/**
* 获得指定日期的前一天
* @param specifiedDay
* @return
* @throws Exception
*/
public static String getSpecifiedDayBefore(String specifiedDay, Integer i) {
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - i);

String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}

/**
* 获得指定日期的后一天
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay, Integer i) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + i);

String dayAfter = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayAfter;
}

public static String getOpenDateCount(String openedDateInput, Integer i) {
String openedDate = null;
switch (i) {
case 1:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 1);
break;
case 2:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 2);
break;
case 3:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 3);
break;
case 4:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 4);
break;
case 5:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 5);
break;
case 6:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 6);
break;
case 7:
openedDate = ZtDateUtil.getSpecifiedDayBefore(openedDateInput, 7);
break;
}
return openedDate;
}

/**
* 获取两个日期相差几个月
* @author 石冬冬-Heil Hilter(dd.shi02@zuche.com)
* @date 2016-11-30 下午7:57:32
* @param start
* @param end
* @return
*/
public static int getMonth(Date start, Date end) {
if (start.after(end)) {
Date t = start;
start = end;
end = t;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
Calendar temp = Calendar.getInstance();
temp.setTime(end);
temp.add(Calendar.DATE, 1);

int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);

if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month + 1;
} else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month;
} else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) {
return year * 12 + month;
} else {
return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
}
}

/*获取间隔的月数*/
public static Integer getMonthsNum(String dstr1, String dstr2) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟
Date date1 = sdf.parse(dstr1);
Date date2 = sdf.parse(dstr2);
Integer monthsNum = ZtDateUtil.getMonth(date1, date2);
return monthsNum;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}

/*获取月份的第一天*/
public static String getFirstDay(String date, Integer num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//获取前月的第一天
Calendar cal = Calendar.getInstance();//获取当前日期
/*对前端出入的日期进行Date格式化*/
Date date1 = null;
Integer count = -num;
try {
date1 = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
cal.setTime(date1);
cal.add(Calendar.MONTH, count);
cal.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
String firstDay = format.format(cal.getTime());
return firstDay;
}

/*获取月份的最后一天*/
public static String getLastDay(String date, Integer num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//获取前月的第一天
Calendar cal = Calendar.getInstance();
/*对前端出入的日期进行Date格式化*/
Date date1 = null;
Integer count = 1 - num;
try {
date1 = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
cal.setTime(date1);
cal.add(Calendar.MONTH, count);
cal.set(Calendar.DAY_OF_MONTH, 0);//设置为1号,当前日期既为本月第一天
String lastDay = format.format(cal.getTime());
return lastDay;
}

/*获取前几个月*/
public static String getMonthsBefore(String date, Integer num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = null;
String beforeMonth = null;
Calendar cale = Calendar.getInstance();
try {
date1 = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
cale.setTime(date1);
cale.add(Calendar.MONTH, -num);
cale.set(Calendar.DAY_OF_MONTH, 0);//设置为1号,当前日期既为本月第一天
beforeMonth = format.format(cale.getTime());
return beforeMonth;
}

/*计算自然周*/
public static List<String> getWeekFirsLast(String date, Integer num) {
List<String> containDays = new ArrayList<String>();
Calendar week = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Integer count1 = 1 - num;
try {
week.setTime(format.parse(date));
week.add(Calendar.WEEK_OF_YEAR, count1);
date = format.format(week.getTime());
Calendar c = Calendar.getInstance();
c.setTime(format.parse(date));
c.set(Calendar.DAY_OF_WEEK, 1);
/*周中第一天*/
date = format.format(c.getTime());
containDays.add(date);
c.set(Calendar.DAY_OF_WEEK, 7);
/*周中最后一天*/
date = format.format(c.getTime());
containDays.add(date);
} catch (ParseException e) {
e.printStackTrace();
}
return containDays;
}

/*计算相差的周数*/
public static Integer getcountTwoDayWeek(String startDate, String endDate) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
Date start = null;
Date end = null;
try {
start = format.parse(startDate);
end = format.parse(endDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(start);
long time1 = cal.getTimeInMillis();
cal.setTime(end);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
Double days = Double.parseDouble(String.valueOf(between_days));
if ((days / 7) > 0 && (days / 7) <= 1) {
//不满一周的按一周算
return 1;
} else if (days / 7 > 1) {
int day = days.intValue();
if (day % 7 > 0) {
return day / 7 + 1;
} else {
return day / 7;
}
} else if ((days / 7) == 0) {
return 0;
} else {
//负数返还null
return null;
}
}
return null;
}
}
原文地址:https://www.cnblogs.com/April-Chou-HelloWorld/p/6635266.html