packagecom.stt.dateChange;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;/***
*@authorzengms
* @date 2012-12-27
**/
public classDateUtils {private static final Log logger = LogFactory.getLog(DateUtils.class);public static final String YYYYMMDD = "yyyy-MM-dd";public static final String YYYYMMDD_ZH = "yyyy年MM月dd日";public static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY; //中国周一是一周的第一天
/***
*@paramstrDate
*@return
*/
public staticDate parseDate(String strDate) {return parseDate(strDate, null);
}/*** parseDate
*
*@paramstrDate
*@parampattern
*@return
*/
public staticDate parseDate(String strDate, String pattern) {
Date date= null;try{if (pattern == null) {
pattern=YYYYMMDD;
}
SimpleDateFormat format= newSimpleDateFormat(pattern);
date=format.parse(strDate);
}catch(Exception e) {
logger.error("parseDate error:" +e);
}returndate;
}/*** format date
*
*@paramdate
*@return
*/
public staticString formatDate(Date date) {return formatDate(date, null);
}/*** format date
*
*@paramdate
*@parampattern
*@return
*/
public staticString formatDate(Date date, String pattern) {
String strDate= null;try{if (pattern == null) {
pattern=YYYYMMDD;
}
SimpleDateFormat format= newSimpleDateFormat(pattern);
strDate=format.format(date);
}catch(Exception e) {
logger.error("formatDate error:", e);
}returnstrDate;
}/*** 取得日期:年
*
*@paramdate
*@return
*/
public static intgetYear(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);int year =c.get(Calendar.YEAR);returnyear;
}/*** 取得日期:年
*
*@paramdate
*@return
*/
public static intgetMonth(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);int month =c.get(Calendar.MONTH);return month + 1;
}/*** 取得日期:年
*
*@paramdate
*@return
*/
public static intgetDay(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);int da =c.get(Calendar.DAY_OF_MONTH);returnda;
}/*** 取得当天日期是周几
*
*@paramdate
*@return
*/
public static intgetWeekDay(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);int week_of_year =c.get(Calendar.DAY_OF_WEEK);return week_of_year - 1;
}/*** 取得一年的第几周
*
*@paramdate
*@return
*/
public static intgetWeekOfYear(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);int week_of_year =c.get(Calendar.WEEK_OF_YEAR);returnweek_of_year;
}/*** getWeekBeginAndEndDate
*
*@paramdate
*@parampattern
*@return
*/
public staticString getWeekBeginAndEndDate(Date date, String pattern) {
Date monday=getMondayOfWeek(date);
Date sunday=getSundayOfWeek(date);return formatDate(monday, pattern) + " - "
+formatDate(sunday, pattern);
}/*** 根据日期取得对应周周一日期
*
*@paramdate
*@return
*/
public staticDate getMondayOfWeek(Date date) {
Calendar monday=Calendar.getInstance();
monday.setTime(date);
monday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
monday.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);returnmonday.getTime();
}/*** 根据日期取得对应周周日日期
*
*@paramdate
*@return
*/
public staticDate getSundayOfWeek(Date date) {
Calendar sunday=Calendar.getInstance();
sunday.setTime(date);
sunday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);returnsunday.getTime();
}/*** 取得月的剩余天数
*
*@paramdate
*@return
*/
public static intgetRemainDayOfMonth(Date date) {int dayOfMonth =getDayOfMonth(date);int day =getPassDayOfMonth(date);return dayOfMonth -day;
}/*** 取得月已经过的天数
*
*@paramdate
*@return
*/
public static intgetPassDayOfMonth(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);returnc.get(Calendar.DAY_OF_MONTH);
}/*** 取得月天数
*
*@paramdate
*@return
*/
public static intgetDayOfMonth(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);returnc.getActualMaximum(Calendar.DAY_OF_MONTH);
}/*** 取得月第一天
*
*@paramdate
*@return
*/
public staticDate getFirstDateOfMonth(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));returnc.getTime();
}/*** 取得月最后一天
*
*@paramdate
*@return
*/
public staticDate getLastDateOfMonth(Date date) {
Calendar c=Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));returnc.getTime();
}/*** 取得季度第一天
*
*@paramdate
*@return
*/
public staticDate getFirstDateOfSeason(Date date) {return getFirstDateOfMonth(getSeasonDate(date)[0]);
}/*** 取得季度最后一天
*
*@paramdate
*@return
*/
public staticDate getLastDateOfSeason(Date date) {return getLastDateOfMonth(getSeasonDate(date)[2]);
}/*** 取得季度天数
*
*@paramdate
*@return
*/
public static intgetDayOfSeason(Date date) {int day = 0;
Date[] seasonDates=getSeasonDate(date);for(Date date2 : seasonDates) {
day+=getDayOfMonth(date2);
}returnday;
}/*** 取得季度剩余天数
*
*@paramdate
*@return
*/
public static intgetRemainDayOfSeason(Date date) {return getDayOfSeason(date) -getPassDayOfSeason(date);
}/*** 取得季度已过天数
*
*@paramdate
*@return
*/
public static intgetPassDayOfSeason(Date date) {int day = 0;
Date[] seasonDates=getSeasonDate(date);
Calendar c=Calendar.getInstance();
c.setTime(date);int month =c.get(Calendar.MONTH);if (month == Calendar.JANUARY || month ==Calendar.APRIL|| month == Calendar.JULY || month == Calendar.OCTOBER) {//季度第一个月
day = getPassDayOfMonth(seasonDates[0]);
}else if (month == Calendar.FEBRUARY || month ==Calendar.MAY|| month == Calendar.AUGUST || month == Calendar.NOVEMBER) {//季度第二个月
day = getDayOfMonth(seasonDates[0])+ getPassDayOfMonth(seasonDates[1]);
}else if (month == Calendar.MARCH || month ==Calendar.JUNE|| month == Calendar.SEPTEMBER || month == Calendar.DECEMBER) {//季度第三个月
day = getDayOfMonth(seasonDates[0]) + getDayOfMonth(seasonDates[1])+ getPassDayOfMonth(seasonDates[2]);
}returnday;
}/*** 取得季度月
*
*@paramdate
*@return
*/
public staticDate[] getSeasonDate(Date date) {
Date[] season= new Date[3];
Calendar c=Calendar.getInstance();
c.setTime(date);int nSeason =getSeason(date);if (nSeason == 1) {//第一季度
c.set(Calendar.MONTH, Calendar.JANUARY);
season[0] =c.getTime();
c.set(Calendar.MONTH, Calendar.FEBRUARY);
season[1] =c.getTime();
c.set(Calendar.MONTH, Calendar.MARCH);
season[2] =c.getTime();
}else if (nSeason == 2) {//第二季度
c.set(Calendar.MONTH, Calendar.APRIL);
season[0] =c.getTime();
c.set(Calendar.MONTH, Calendar.MAY);
season[1] =c.getTime();
c.set(Calendar.MONTH, Calendar.JUNE);
season[2] =c.getTime();
}else if (nSeason == 3) {//第三季度
c.set(Calendar.MONTH, Calendar.JULY);
season[0] =c.getTime();
c.set(Calendar.MONTH, Calendar.AUGUST);
season[1] =c.getTime();
c.set(Calendar.MONTH, Calendar.SEPTEMBER);
season[2] =c.getTime();
}else if (nSeason == 4) {//第四季度
c.set(Calendar.MONTH, Calendar.OCTOBER);
season[0] =c.getTime();
c.set(Calendar.MONTH, Calendar.NOVEMBER);
season[1] =c.getTime();
c.set(Calendar.MONTH, Calendar.DECEMBER);
season[2] =c.getTime();
}returnseason;
}/***
* 1 第一季度 2 第二季度 3 第三季度 4 第四季度
*
*@paramdate
*@return
*/
public static intgetSeason(Date date) {int season = 0;
Calendar c=Calendar.getInstance();
c.setTime(date);int month =c.get(Calendar.MONTH);switch(month) {caseCalendar.JANUARY:caseCalendar.FEBRUARY:caseCalendar.MARCH:
season= 1;break;caseCalendar.APRIL:caseCalendar.MAY:caseCalendar.JUNE:
season= 2;break;caseCalendar.JULY:caseCalendar.AUGUST:caseCalendar.SEPTEMBER:
season= 3;break;caseCalendar.OCTOBER:caseCalendar.NOVEMBER:caseCalendar.DECEMBER:
season= 4;break;default:break;
}returnseason;
}public static voidmain(String[] args) {
String strDate= "2013-01-01";
Date date=parseDate(strDate);
System.out.println(strDate+ " 今天是哪一年?" +getYear(date));
System.out.println(strDate+ " 今天是哪个月?" +getMonth(date));
System.out.println(strDate+ " 今天是几号?" +getDay(date));
System.out.println(strDate+ " 今天是周几?" +getWeekDay(date));
System.out.println(strDate+ " 是一年的第几周?" +getWeekOfYear(date));
System.out.println(strDate+ " 所在周起始结束日期?"
+ getWeekBeginAndEndDate(date, "yyyy年MM月dd日"));
System.out.println(strDate+ " 所在周周一是?"
+formatDate(getMondayOfWeek(date)));
System.out.println(strDate+ " 所在周周日是?"
+formatDate(getSundayOfWeek(date)));
System.out.println(strDate+ " 当月第一天日期?"
+formatDate(getFirstDateOfMonth(date)));
System.out.println(strDate+ " 当月最后一天日期?"
+formatDate(getLastDateOfMonth(date)));
System.out.println(strDate+ " 当月天数?" +getDayOfMonth(date));
System.out.println(strDate+ " 当月已过多少天?" +getPassDayOfMonth(date));
System.out.println(strDate+ " 当月剩余多少天?" +getRemainDayOfMonth(date));
System.out.println(strDate+ " 所在季度第一天日期?"
+formatDate(getFirstDateOfSeason(date)));
System.out.println(strDate+ " 所在季度最后一天日期?"
+formatDate(getLastDateOfSeason(date)));
System.out.println(strDate+ " 所在季度天数?" +getDayOfSeason(date));
System.out.println(strDate+ " 所在季度已过多少天?" +getPassDayOfSeason(date));
System.out
.println(strDate+ " 所在季度剩余多少天?" +getRemainDayOfSeason(date));
System.out.println(strDate+ " 是第几季度?" +getSeason(date));
System.out.println(strDate+ " 所在季度月份?"
+ formatDate(getSeasonDate(date)[0], "yyyy年MM月") + "/"
+ formatDate(getSeasonDate(date)[1], "yyyy年MM月") + "/"
+ formatDate(getSeasonDate(date)[2], "yyyy年MM月"));
}
}