CalendarUtil
package com.jyd.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
/**
* @describe:日期工具类
* @author: liujun
* @date: 2016年4月7日 上午10:38:56
*/
public class CalendarUtil {
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String DATE_SINGLE_FORMAT = "yyyy-M-d";
public static final String DATE_SLASH_FORMAT = "yyyy/MM/dd";
public static final String DATE_SINGLE_SLASH_FORMAT = "yyyy/M/d";
public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_NOT_SLASH_FORMAT = "yyyyMMddhhmmss";
public static final String DATE_NOT_YY_FORMAT = "MM-dd";
public static final String DATE_NOT_DD_FORMAT = "yyyy年MM月";
public static final String DATE_FIRST_DAY = "yyyy-MM-01";
public static final String DATE_YYMM_DAY = "yyyy-MM";
public static final String DATE_PATTERN_DAY_CHINNESS_DEFAULT = "yyyy年MM月dd日";
public static final String DATE_PATTERN_DAY_CHINNESS = "【yyyy】年【MM】月【dd】";
public static final String DATE_PATTERN_JUEST_DAY = "dd";
public static String formatDateByStr(Date input, String str) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, str);
}
return returnValue;
}
public static String formatDate(Date input) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, DATE_FORMAT);
}
return returnValue;
}
public static String formatNotYDate(Date input) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, DATE_NOT_YY_FORMAT);
}
return returnValue;
}
public static String formatNotDDate(Date input) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input,DATE_NOT_DD_FORMAT);
}
return returnValue;
}
public static String getDateNotSlashFormat(Date input){
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, DATE_NOT_SLASH_FORMAT);
}
return returnValue;
}
/**
* 按指定样式格式化时间
* @param input
* @param format
* @return
*/
public static String formatDate(Date input,String format) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, format);
}
return returnValue;
}
public static String formatDateTime(Date input) {
String returnValue = null;
if (input != null) {
returnValue = DateFormatUtils.format(input, DATETIME_FORMAT);
}
return returnValue;
}
public static Date parseDate(String input) {
Date result = null;
try {
result = DateUtils.parseDate(input, DATE_FORMAT);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
public static Date parseDateTime(String input) {
Date result = null;
try {
result = DateUtils.parseDate(input, DATETIME_FORMAT);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
public static Date parseDateToMonth(String input) {
Date result = null;
try {
result = DateUtils.parseDate(input, DATE_NOT_DD_FORMAT);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
public static Date parseDateToMonthTwo(String input) {
Date result = null;
try {
result = DateUtils.parseDate(input, DATE_YYMM_DAY);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* 日期之前
*
* @param date
* @param date2
* @return
*/
public static boolean isBefore(Date date, Date date2) {
return null != date && null != date2 && date.before(date2);
}
/**
* 日期之前
*
* @param date
* @param date2
* @return
*/
public static boolean isEqualOrBefore(Date date, Date date2) {
return null != date && null != date2 && (date.before(date2) || date.equals(date2));
}
/**
* 日期之后
*
* @param date
* @param date2
* @return
*/
public static boolean isAfter(Date date, Date date2) {
return null != date && null != date2 && date.after(date2);
}
/**
* 日期之中
*
* @param date 目标日期
* @param date2 开始日期
* @param date3 结束日期
* @return
*/
public static boolean isBetween(Date date, Date date2, Date date3) {
return null != date && isAfter(date, date2) && isBefore(date, date3);
}
/**
* @methodName:isBetweenEquals
* @describe:日期之中 包括等于
* @author:liujun
* @date:2016年6月14日下午4:45:33
*/
public static boolean isBetweenEquals(Date date, Date date2, Date date3) {
return !ObjectUtils.equals(null, date) &&
(isAfter(date, date2) && isBefore(date, date3)
|| ObjectUtils.equals(date, date2)
|| ObjectUtils.equals(date, date3));
}
/**
* 某一个日期n月相对应某一天 n 为负值表示向前 n 为正值表示向后
*/
public static Date calDateForMonth(Date date, int n) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, n);
return c.getTime();
}
/**
* 某一个日期n天相对应某一天 n 为负值表示向前 n 为正值表示向后
*/
public static Date calDateForDay(Date date, int n) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DAY_OF_MONTH, n);
return c.getTime();
}
/**
* 某一个日期n天相对应某一天 n 为负值表示向前 n 为正值表示向后
*/
public static Date calDateForYear(Date date, int n) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.YEAR, n);
return c.getTime();
}
/**
* 取某一个时间相对某一时间n小时向前或向后的时间
*/
public static Date calDateForHour(Date date, int n) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(java.util.Calendar.HOUR_OF_DAY, n);
return c.getTime();
}
/**
* 取某一时间相对某一时间n分钟向前或向后的时间
*/
public static Date calDateForMin(Date date, int n) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(java.util.Calendar.MINUTE, n);
return c.getTime();
}
/**
* 当前月份最大天数
*
* @param args
*/
public static int currentMonthMaxDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
return day;
}
/**
* 计算日期天数差值
*
* @param early
* @param late
* @return
*/
public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
// 设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);
// 得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}
/**
* 获取传入日期的开始时间 00:00:00
*/
public static final Date calBeginTimeForThisTime(Date date) {
java.util.Calendar calst = java.util.Calendar.getInstance();
calst.setTime(date);
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
return calst.getTime();
}
/**
* 获取传入日期的结束时间 00:00:00
*/
public static final Date calEndTimeForThisTime(Date date) {
java.util.Calendar calst = java.util.Calendar.getInstance();
calst.setTime(date);
calst.set(java.util.Calendar.HOUR_OF_DAY, 23);
calst.set(java.util.Calendar.MINUTE, 59);
calst.set(java.util.Calendar.SECOND, 59);
return calst.getTime();
}
public static int getBetweenSecondNumberNotAbsolute(Date startDate, Date endDate) {
if (startDate == null || endDate == null)
return -1;
long timeNumber = -1L;
long TIME = 1000L;
try {
timeNumber = (endDate.getTime() - startDate.getTime()) / TIME;
} catch (Exception e) {
e.printStackTrace();
}
return (int) timeNumber;
}
/**
* 忽略时间来判断两个日期是否相同天
*
* @param dateOne
* @param dateTwo
* @return
*/
public static boolean isSameDay(Date dateOne, Date dateTwo) {
return DateUtils.isSameDay(dateOne, dateTwo);
}
/**
* 获取2个时间相隔几分钟,非绝对值
*/
public static int getMinutesNotAbsolute(Date startDate, Date endDate) {
if (startDate == null || endDate == null)
return -1;
long timeNumber = -1l;
long TIME = 60L * 1000L;
try {
timeNumber = (endDate.getTime() - startDate.getTime()) / TIME;
} catch (Exception e) {
e.printStackTrace();
}
return (int) timeNumber;
}
/**
* 获取时间+N分钟的值
*
* @param date
* @param num
* @return
*/
public static Date getNextTime(Date date, int num) {
Calendar ca = Calendar.getInstance();
ca.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
ca.setTime(date);
int minute = ca.get(Calendar.MINUTE);
minute = minute + num;
ca.set(Calendar.MINUTE, minute);
return ca.getTime();
}
/**
* 获取时间-N分钟的值
*
* @param date
* @param num
* @return
*/
public static Date getPreTime(Date date, int num) {
Calendar ca = Calendar.getInstance();
ca.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
ca.setTime(date);
int minute = ca.get(Calendar.MINUTE);
minute = minute - num;
ca.set(Calendar.MINUTE, minute);
return ca.getTime();
}
/**
* 将字符串转化为日期。 字符串格式("YYYY-MM-DD")。
* 例如:"2012-07-01"或者"2012-7-1"或者"2012-7-01"或者"2012-07-1"是等价的。
*/
public static Date stringToDate(String str, String pattern) {
Date dateTime = null;
try {
SimpleDateFormat formater = new SimpleDateFormat(pattern);
dateTime = formater.parse(str);
} catch (Exception e) {
e.printStackTrace();
}
return dateTime;
}
/**
* 根据指定格式获取日期数据
*/
private static String getFormatDateTime(Date date, String pattern) {
if (null == date) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(pattern);
format.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
return format.format(date);
}
/**
* 给定一个日期和天数,得到这个日期+天数的日期
*/
public static String getNextDay(String date, int num,String format) {
Date d = stringToDate(date, format);
Calendar ca = Calendar.getInstance();
ca.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
ca.setTime(d);
int day = ca.get(Calendar.DATE);
day = day + num;
ca.set(Calendar.DATE, day);
return getFormatDateTime(ca.getTime(), format);
}
/**
* 将日期转化为字符串
*/
public static String dateToString(Date date, String pattern) {
String str = "";
try {
SimpleDateFormat formater = new SimpleDateFormat(pattern);
str = formater.format(date);
} catch (Throwable e) {
e.printStackTrace();
}
return str;
}
/**
* 将字符串转化为日期
*/
public static Date stringToDateTime(String str) {
return parseDateTime(str);
}
/**
* @Description 获取当前时间的numDate后的日期
* @param startDate
* @param numDate
* @return
*/
public static String getSomeDate(Date startDate,int numDate){
String open_time = formatDateTime(startDate);
return getNextDay(open_time,numDate,DATETIME_FORMAT);
}
/**
* @describe:获取特殊字符串
* @author: liujun
* @date: 2016年4月7日 下午3:51:59
*/
public static String getDayOfWeekFormat(Date startDate,Date endDate,int week){
String startDateStr = CalendarUtil.formatDate(startDate);
String endDateStr = CalendarUtil.formatDate(endDate);
StringBuilder sbf = new StringBuilder();
sbf.append(startDateStr).append("至").append(endDateStr).append("</br>第"+week+"周");
return sbf.toString();
}
/**
* @describe:获取周报价时间标题头
* @author: liujun
* @date: 2016年4月7日 下午4:20:16
*/
public static List<String> getListWeekDate(Date parseDate){
List<String> timeList = new ArrayList<String>();
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);// 计算第几周用到
c.setTime(parseDate);
// 计算星期几
int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
day_of_week = day_of_week == 0 ? 7 : day_of_week;
// 该日期所在开始时间
c.add(Calendar.DATE, -day_of_week + 7);
Date endTime = c.getTime();
// 该日期所在结束时间
c.add(Calendar.DATE, -6);
Date startTime = c.getTime();
// 计算当前日期在本年第几周
int intWeek = c.get(Calendar.WEEK_OF_YEAR);
timeList.add(CalendarUtil.getDayOfWeekFormat(startTime, endTime, intWeek));
int currWeek = 0;
Date otherStart = null;
Date otherEnd = null;
for (int i = 1; i < 5; i++) {
c.add(Calendar.DATE, -1);
otherEnd = c.getTime();
c.add(Calendar.DATE, -6);
otherStart = c.getTime();
currWeek = c.get(Calendar.WEEK_OF_YEAR);
timeList.add(CalendarUtil.getDayOfWeekFormat(otherStart, otherEnd, currWeek));
}
return timeList;
}
/**
* @methodName:getWeek
* @describe:返回当前日期所在年份周
* @author:liujun
* @date:2016年6月15日上午11:48:03
*/
public static int getWeek(Date date){
Calendar cl = Calendar.getInstance();
cl.setTime(date);
return cl.get(Calendar.WEEK_OF_YEAR);
}
/**
* 获取一个时间段所有时间
* @param startDate
* @param endDate
* @return
*/
public static List<Date> getBetweenAllDate(Date startDate, Date endDate) {
List<Date> lDate = new ArrayList<Date>();
lDate.add(startDate);// 把开始时间加入集合
Calendar cal = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
cal.setTime(startDate);
boolean bContinue = true;
while (bContinue) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
cal.add(Calendar.DAY_OF_MONTH, 1);
// 测试此日期是否在指定日期之后
if (endDate.after(cal.getTime())) {
lDate.add(cal.getTime());
} else {
break;
}
}
lDate.add(endDate);// 把结束时间加入集合
return lDate;
}
/**
* @methodName:getFirstDayOfMonth
* @describe:返回指定年月第一天
* @author:liujun
* @date:2016年4月19日下午12:56:26
*/
public static Date getFirstDayOfMonth(Integer year, Integer month) {
Calendar calendar = Calendar.getInstance();
if (year == null) {
year = calendar.get(Calendar.YEAR);
}
if (month == null) {
month = calendar.get(Calendar.MONTH);
}
calendar.set(year, month-1, 1);
return calendar.getTime();
}
/**
* @methodName:getLastDayOfMonth
* @describe:获得指定年月 最后一天
* @author:liujun
* @date:2016年4月19日下午12:55:41
*/
public static Date getLastDayOfMonth(Integer year, Integer month) {
Calendar calendar = Calendar.getInstance();
if (year == null) {
year = calendar.get(Calendar.YEAR);
}
if (month == null) {
month = calendar.get(Calendar.MONTH);
}
calendar.set(year, month-1, 1);
calendar.roll(Calendar.DATE, -1);
return calendar.getTime();
}
/**
* @methodName:getLastDayOfMonth
* @describe:获得但前时间所在月的第一天
* @parms:date当前时间
* @auth:liujun
* @date:2016年4月19日
*/
public static Date getFirstDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
return calendar.getTime();
}
/**
* @methodName:getLastDayOfMonth
* @describe:获得但前时间所在月的第一天
* @parms:date当前时间
* @auth:liujun
* @date:2016年4月19日
*/
public static Date getLastDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
calendar.roll(Calendar.DATE, -1);
return calendar.getTime();
}
/**
* 得到上一周的周一
*/
public static Date getWeekOfMonday(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_WEEK, -1);
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (day_of_week == 0)
day_of_week = 7;
calendar.add(Calendar.DATE, -day_of_week + 1);
return calendar.getTime();
}
/**
* 得到上一周的周日
*/
public static Date getWeekOfSunday(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_WEEK, -1);
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (day_of_week == 0)
day_of_week = 7;
calendar.add(Calendar.DATE, -day_of_week + 7);
return calendar.getTime();
}
public static boolean determineAppointWeek(String date, String character, int num) {
if (StringUtils.isEmpty(date)) return false;
if (StringUtils.isNotEmpty(character)) num = -1;
Date toDate = stringToDate(date, DATE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(toDate);
int dayOfWeek = -1;
if ("A".equals(character) || 1==num) {
dayOfWeek = 1;
} else if ("B".equals(character) || 2==num) {
dayOfWeek = 2;
} else if ("C".equals(character) || 3==num) {
dayOfWeek = 3;
} else if ("D".equals(character) || 4==num) {
dayOfWeek = 4;
} else if ("E".equals(character) || 5==num) {
dayOfWeek = 5;
} else if ("F".equals(character) || 6==num) {
dayOfWeek = 6;
} else if ("G".equals(character) || 7==num) {
dayOfWeek = 0;
}
int i = calendar.get(Calendar.DAY_OF_WEEK)-1;
if (dayOfWeek == i) {
return true;
}
return false;
}
public static boolean determineAppointWeek(Date date, String character, int num) {
if (ObjectUtils.equals(null, date)) return false;
if (StringUtils.isNotEmpty(character)) num = -1;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = -1;
if ("A".equals(character) || 1==num) {
dayOfWeek = 1;
} else if ("B".equals(character) || 2==num) {
dayOfWeek = 2;
} else if ("C".equals(character) || 3==num) {
dayOfWeek = 3;
} else if ("D".equals(character) || 4==num) {
dayOfWeek = 4;
} else if ("E".equals(character) || 5==num) {
dayOfWeek = 5;
} else if ("F".equals(character) || 6==num) {
dayOfWeek = 6;
} else if ("G".equals(character) || 7==num) {
dayOfWeek = 0;
}
int i = calendar.get(Calendar.DAY_OF_WEEK)-1;
if (dayOfWeek == i) {
return true;
}
return false;
}
/**
* 获取第几周的数值
* @param parseDate
* @return
*/
public static int getNumOfWeek(Date parseDate){
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);// 计算第几周用到
c.setTime(parseDate);
int intWeek = c.get(Calendar.WEEK_OF_YEAR);
return intWeek;
}
public static void main(String[] args) throws ParseException {
String dataType = "18D";
String substring = dataType.substring(dataType.length()-1,dataType.length());
String date = "2016-08-25";
System.out.println(CalendarUtil.determineAppointWeek(date, substring, -1));
}
}

浙公网安备 33010602011771号