?
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
DateUtil類
- package?com.util;??
- ??
- import?java.text.SimpleDateFormat;??
- import?java.util.ArrayList;??
- import?java.util.Calendar;??
- import?java.util.Date;??
- import?java.util.HashMap;??
- import?java.util.List;??
- import?java.util.Map;??
- ??
- public?class?DateUtil?{??
- ??
- ????/**?
- ?????*?獲取SimpleDateFormat?
- ?????*?@param?parttern?日期格式?
- ?????*?@return?SimpleDateFormat對象?
- ?????*?@throws?RuntimeException?異常:非法日期格式?
- ?????*/??
- ????private?static?SimpleDateFormat?getDateFormat(String?parttern)?throws?RuntimeException?{??
- ????????return?new?SimpleDateFormat(parttern);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期中的某數值。如獲取月份?
- ?????*?@param?date?日期?
- ?????*?@param?dateType?日期格式?
- ?????*?@return?數值?
- ?????*/??
- ????private?static?int?getInteger(Date?date,?int?dateType)?{??
- ????????Calendar?calendar?=?Calendar.getInstance();??
- ????????calendar.setTime(date);??
- ????????return?calendar.get(dateType);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期中某類型的某數值。如增加日期?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dateType?類型?
- ?????*?@param?amount?數值?
- ?????*?@return?計算后日期字符串?
- ?????*/??
- ????private?static?String?addInteger(String?date,?int?dateType,?int?amount)?{??
- ????????String?dateString?=?null;??
- ????????DateStyle?dateStyle?=?getDateStyle(date);??
- ????????if?(dateStyle?!=?null)?{??
- ????????????Date?myDate?=?StringToDate(date,?dateStyle);??
- ????????????myDate?=?addInteger(myDate,?dateType,?amount);??
- ????????????dateString?=?DateToString(myDate,?dateStyle);??
- ????????}??
- ????????return?dateString;??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期中某類型的某數值。如增加日期?
- ?????*?@param?date?日期?
- ?????*?@param?dateType?類型?
- ?????*?@param?amount?數值?
- ?????*?@return?計算后日期?
- ?????*/??
- ????private?static?Date?addInteger(Date?date,?int?dateType,?int?amount)?{??
- ????????Date?myDate?=?null;??
- ????????if?(date?!=?null)?{??
- ????????????Calendar?calendar?=?Calendar.getInstance();??
- ????????????calendar.setTime(date);??
- ????????????calendar.add(dateType,?amount);??
- ????????????myDate?=?calendar.getTime();??
- ????????}??
- ????????return?myDate;??
- ????}??
- ??
- ????/**?
- ?????*?獲取精確的日期?
- ?????*?@param?timestamps?時間long集合?
- ?????*?@return?日期?
- ?????*/??
- ????private?static?Date?getAccurateDate(List<Long>?timestamps)?{??
- ????????Date?date?=?null;??
- ????????long?timestamp?=?0;??
- ????????Map<Long,?long[]>?map?=?new?HashMap<Long,?long[]>();??
- ????????List<Long>?absoluteValues?=?new?ArrayList<Long>();??
- ??
- ????????if?(timestamps?!=?null?&&?timestamps.size()?>?0)?{??
- ????????????if?(timestamps.size()?>?1)?{??
- ????????????????for?(int?i?=?0;?i?<?timestamps.size();?i++)?{??
- ????????????????????for?(int?j?=?i?+?1;?j?<?timestamps.size();?j++)?{??
- ????????????????????????long?absoluteValue?=?Math.abs(timestamps.get(i)?-?timestamps.get(j));??
- ????????????????????????absoluteValues.add(absoluteValue);??
- ????????????????????????long[]?timestampTmp?=?{?timestamps.get(i),?timestamps.get(j)?};??
- ????????????????????????map.put(absoluteValue,?timestampTmp);??
- ????????????????????}??
- ????????????????}??
- ??
- ????????????????//?有可能有相等的情況。如2012-11和2012-11-01。時間戳是相等的??
- ????????????????long?minAbsoluteValue?=?-1;??
- ????????????????if?(!absoluteValues.isEmpty())?{??
- ????????????????????//?如果timestamps的size為2,這是差值只有一個,因此要給默認值??
- ????????????????????minAbsoluteValue?=?absoluteValues.get(0);??
- ????????????????}??
- ????????????????for?(int?i?=?0;?i?<?absoluteValues.size();?i++)?{??
- ????????????????????for?(int?j?=?i?+?1;?j?<?absoluteValues.size();?j++)?{??
- ????????????????????????if?(absoluteValues.get(i)?>?absoluteValues.get(j))?{??
- ????????????????????????????minAbsoluteValue?=?absoluteValues.get(j);??
- ????????????????????????}?else?{??
- ????????????????????????????minAbsoluteValue?=?absoluteValues.get(i);??
- ????????????????????????}??
- ????????????????????}??
- ????????????????}??
- ??
- ????????????????if?(minAbsoluteValue?!=?-1)?{??
- ????????????????????long[]?timestampsLastTmp?=?map.get(minAbsoluteValue);??
- ????????????????????if?(absoluteValues.size()?>?1)?{??
- ????????????????????????timestamp?=?Math.max(timestampsLastTmp[0],?timestampsLastTmp[1]);??
- ????????????????????}?else?if?(absoluteValues.size()?==?1)?{??
- ????????????????????????//?當timestamps的size為2,需要與當前時間作為參照??
- ????????????????????????long?dateOne?=?timestampsLastTmp[0];??
- ????????????????????????long?dateTwo?=?timestampsLastTmp[1];??
- ????????????????????????if?((Math.abs(dateOne?-?dateTwo))?<?100000000000L)?{??
- ????????????????????????????timestamp?=?Math.max(timestampsLastTmp[0],?timestampsLastTmp[1]);??
- ????????????????????????}?else?{??
- ????????????????????????????long?now?=?new?Date().getTime();??
- ????????????????????????????if?(Math.abs(dateOne?-?now)?<=?Math.abs(dateTwo?-?now))?{??
- ????????????????????????????????timestamp?=?dateOne;??
- ????????????????????????????}?else?{??
- ????????????????????????????????timestamp?=?dateTwo;??
- ????????????????????????????}??
- ????????????????????????}??
- ????????????????????}??
- ????????????????}??
- ????????????}?else?{??
- ????????????????timestamp?=?timestamps.get(0);??
- ????????????}??
- ????????}??
- ??
- ????????if?(timestamp?!=?0)?{??
- ????????????date?=?new?Date(timestamp);??
- ????????}??
- ????????return?date;??
- ????}??
- ??
- ????/**?
- ?????*?判斷字符串是否為日期字符串?
- ?????*?@param?date?日期字符串?
- ?????*?@return?true?or?false?
- ?????*/??
- ????public?static?boolean?isDate(String?date)?{??
- ????????boolean?isDate?=?false;??
- ????????if?(date?!=?null)?{??
- ????????????if?(StringToDate(date)?!=?null)?{??
- ????????????????isDate?=?true;??
- ????????????}??
- ????????}??
- ????????return?isDate;??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期字符串的日期風格。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?日期風格?
- ?????*/??
- ????public?static?DateStyle?getDateStyle(String?date)?{??
- ????????DateStyle?dateStyle?=?null;??
- ????????Map<Long,?DateStyle>?map?=?new?HashMap<Long,?DateStyle>();??
- ????????List<Long>?timestamps?=?new?ArrayList<Long>();??
- ????????for?(DateStyle?style?:?DateStyle.values())?{??
- ????????????Date?dateTmp?=?StringToDate(date,?style.getValue());??
- ????????????if?(dateTmp?!=?null)?{??
- ????????????????timestamps.add(dateTmp.getTime());??
- ????????????????map.put(dateTmp.getTime(),?style);??
- ????????????}??
- ????????}??
- ????????dateStyle?=?map.get(getAccurateDate(timestamps).getTime());??
- ????????return?dateStyle;??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為日期。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?日期?
- ?????*/??
- ????public?static?Date?StringToDate(String?date)?{??
- ????????DateStyle?dateStyle?=?null;??
- ????????return?StringToDate(date,?dateStyle);??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為日期。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?parttern?日期格式?
- ?????*?@return?日期?
- ?????*/??
- ????public?static?Date?StringToDate(String?date,?String?parttern)?{??
- ????????Date?myDate?=?null;??
- ????????if?(date?!=?null)?{??
- ????????????try?{??
- ????????????????myDate?=?getDateFormat(parttern).parse(date);??
- ????????????}?catch?(Exception?e)?{??
- ????????????}??
- ????????}??
- ????????return?myDate;??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為日期。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dateStyle?日期風格?
- ?????*?@return?日期?
- ?????*/??
- ????public?static?Date?StringToDate(String?date,?DateStyle?dateStyle)?{??
- ????????Date?myDate?=?null;??
- ????????if?(dateStyle?==?null)?{??
- ????????????List<Long>?timestamps?=?new?ArrayList<Long>();??
- ????????????for?(DateStyle?style?:?DateStyle.values())?{??
- ????????????????Date?dateTmp?=?StringToDate(date,?style.getValue());??
- ????????????????if?(dateTmp?!=?null)?{??
- ????????????????????timestamps.add(dateTmp.getTime());??
- ????????????????}??
- ????????????}??
- ????????????myDate?=?getAccurateDate(timestamps);??
- ????????}?else?{??
- ????????????myDate?=?StringToDate(date,?dateStyle.getValue());??
- ????????}??
- ????????return?myDate;??
- ????}??
- ??
- ????/**?
- ?????*?將日期轉化為日期字符串。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?parttern?日期格式?
- ?????*?@return?日期字符串?
- ?????*/??
- ????public?static?String?DateToString(Date?date,?String?parttern)?{??
- ????????String?dateString?=?null;??
- ????????if?(date?!=?null)?{??
- ????????????try?{??
- ????????????????dateString?=?getDateFormat(parttern).format(date);??
- ????????????}?catch?(Exception?e)?{??
- ????????????}??
- ????????}??
- ????????return?dateString;??
- ????}??
- ??
- ????/**?
- ?????*?將日期轉化為日期字符串。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?dateStyle?日期風格?
- ?????*?@return?日期字符串?
- ?????*/??
- ????public?static?String?DateToString(Date?date,?DateStyle?dateStyle)?{??
- ????????String?dateString?=?null;??
- ????????if?(dateStyle?!=?null)?{??
- ????????????dateString?=?DateToString(date,?dateStyle.getValue());??
- ????????}??
- ????????return?dateString;??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
- ?????*?@param?date?舊日期字符串?
- ?????*?@param?parttern?新日期格式?
- ?????*?@return?新日期字符串?
- ?????*/??
- ????public?static?String?StringToString(String?date,?String?parttern)?{??
- ????????return?StringToString(date,?null,?parttern);??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
- ?????*?@param?date?舊日期字符串?
- ?????*?@param?dateStyle?新日期風格?
- ?????*?@return?新日期字符串?
- ?????*/??
- ????public?static?String?StringToString(String?date,?DateStyle?dateStyle)?{??
- ????????return?StringToString(date,?null,?dateStyle);??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
- ?????*?@param?date?舊日期字符串?
- ?????*?@param?olddParttern?舊日期格式?
- ?????*?@param?newParttern?新日期格式?
- ?????*?@return?新日期字符串?
- ?????*/??
- ????public?static?String?StringToString(String?date,?String?olddParttern,?String?newParttern)?{??
- ????????String?dateString?=?null;??
- ????????if?(olddParttern?==?null)?{??
- ????????????DateStyle?style?=?getDateStyle(date);??
- ????????????if?(style?!=?null)?{??
- ????????????????Date?myDate?=?StringToDate(date,?style.getValue());??
- ????????????????dateString?=?DateToString(myDate,?newParttern);??
- ????????????}??
- ????????}?else?{??
- ????????????Date?myDate?=?StringToDate(date,?olddParttern);??
- ????????????dateString?=?DateToString(myDate,?newParttern);??
- ????????}??
- ????????return?dateString;??
- ????}??
- ??
- ????/**?
- ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
- ?????*?@param?date?舊日期字符串?
- ?????*?@param?olddDteStyle?舊日期風格?
- ?????*?@param?newDateStyle?新日期風格?
- ?????*?@return?新日期字符串?
- ?????*/??
- ????public?static?String?StringToString(String?date,?DateStyle?olddDteStyle,?DateStyle?newDateStyle)?{??
- ????????String?dateString?=?null;??
- ????????if?(olddDteStyle?==?null)?{??
- ????????????DateStyle?style?=?getDateStyle(date);??
- ????????????dateString?=?StringToString(date,?style.getValue(),?newDateStyle.getValue());??
- ????????}?else?{??
- ????????????dateString?=?StringToString(date,?olddDteStyle.getValue(),?newDateStyle.getValue());??
- ????????}??
- ????????return?dateString;??
- ????}??
- ??
- ????/**?
- ?????*?增加日期的年份。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?yearAmount?增加數量。可為負數?
- ?????*?@return?增加年份后的日期字符串?
- ?????*/??
- ????public?static?String?addYear(String?date,?int?yearAmount)?{??
- ????????return?addInteger(date,?Calendar.YEAR,?yearAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的年份。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?yearAmount?增加數量。可為負數?
- ?????*?@return?增加年份后的日期?
- ?????*/??
- ????public?static?Date?addYear(Date?date,?int?yearAmount)?{??
- ????????return?addInteger(date,?Calendar.YEAR,?yearAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的月份。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?yearAmount?增加數量。可為負數?
- ?????*?@return?增加月份后的日期字符串?
- ?????*/??
- ????public?static?String?addMonth(String?date,?int?yearAmount)?{??
- ????????return?addInteger(date,?Calendar.MONTH,?yearAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的月份。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?yearAmount?增加數量。可為負數?
- ?????*?@return?增加月份后的日期?
- ?????*/??
- ????public?static?Date?addMonth(Date?date,?int?yearAmount)?{??
- ????????return?addInteger(date,?Calendar.MONTH,?yearAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的天數。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加天數后的日期字符串?
- ?????*/??
- ????public?static?String?addDay(String?date,?int?dayAmount)?{??
- ????????return?addInteger(date,?Calendar.DATE,?dayAmount);??
- ????}??
- ??
- ????/**?
- ?????*?增加日期的天數。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加天數后的日期?
- ?????*/??
- ????public?static?Date?addDay(Date?date,?int?dayAmount)?{??
- ????????return?addInteger(date,?Calendar.DATE,?dayAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的小時。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加小時后的日期字符串?
- ?????*/??
- ????public?static?String?addHour(String?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.HOUR_OF_DAY,?hourAmount);??
- ????}??
- ??
- ????/**?
- ?????*?增加日期的小時。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加小時后的日期?
- ?????*/??
- ????public?static?Date?addHour(Date?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.HOUR_OF_DAY,?hourAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的分鐘。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加分鐘后的日期字符串?
- ?????*/??
- ????public?static?String?addMinute(String?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.MINUTE,?hourAmount);??
- ????}??
- ??
- ????/**?
- ?????*?增加日期的分鐘。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加分鐘后的日期?
- ?????*/??
- ????public?static?Date?addMinute(Date?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.MINUTE,?hourAmount);??
- ????}??
- ??????
- ????/**?
- ?????*?增加日期的秒鐘。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加秒鐘后的日期字符串?
- ?????*/??
- ????public?static?String?addSecond(String?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.SECOND,?hourAmount);??
- ????}??
- ??
- ????/**?
- ?????*?增加日期的秒鐘。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@param?dayAmount?增加數量。可為負數?
- ?????*?@return?增加秒鐘后的日期?
- ?????*/??
- ????public?static?Date?addSecond(Date?date,?int?hourAmount)?{??
- ????????return?addInteger(date,?Calendar.SECOND,?hourAmount);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的年份。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?年份?
- ?????*/??
- ????public?static?int?getYear(String?date)?{??
- ????????return?getYear(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的年份。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?年份?
- ?????*/??
- ????public?static?int?getYear(Date?date)?{??
- ????????return?getInteger(date,?Calendar.YEAR);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的月份。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?月份?
- ?????*/??
- ????public?static?int?getMonth(String?date)?{??
- ????????return?getMonth(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的月份。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?月份?
- ?????*/??
- ????public?static?int?getMonth(Date?date)?{??
- ????????return?getInteger(date,?Calendar.MONTH);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的天數。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?天?
- ?????*/??
- ????public?static?int?getDay(String?date)?{??
- ????????return?getDay(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的天數。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?天?
- ?????*/??
- ????public?static?int?getDay(Date?date)?{??
- ????????return?getInteger(date,?Calendar.DATE);??
- ????}??
- ??????
- ????/**?
- ?????*?獲取日期的小時。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?小時?
- ?????*/??
- ????public?static?int?getHour(String?date)?{??
- ????????return?getHour(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的小時。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?小時?
- ?????*/??
- ????public?static?int?getHour(Date?date)?{??
- ????????return?getInteger(date,?Calendar.HOUR_OF_DAY);??
- ????}??
- ??????
- ????/**?
- ?????*?獲取日期的分鐘。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?分鐘?
- ?????*/??
- ????public?static?int?getMinute(String?date)?{??
- ????????return?getMinute(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的分鐘。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?分鐘?
- ?????*/??
- ????public?static?int?getMinute(Date?date)?{??
- ????????return?getInteger(date,?Calendar.MINUTE);??
- ????}??
- ??????
- ????/**?
- ?????*?獲取日期的秒鐘。失敗返回0。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?秒鐘?
- ?????*/??
- ????public?static?int?getSecond(String?date)?{??
- ????????return?getSecond(StringToDate(date));??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的秒鐘。失敗返回0。?
- ?????*?@param?date?日期?
- ?????*?@return?秒鐘?
- ?????*/??
- ????public?static?int?getSecond(Date?date)?{??
- ????????return?getInteger(date,?Calendar.SECOND);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期?。默認yyyy-MM-dd格式。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?日期?
- ?????*/??
- ????public?static?String?getDate(String?date)?{??
- ????????return?StringToString(date,?DateStyle.YYYY_MM_DD);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期。默認yyyy-MM-dd格式。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@return?日期?
- ?????*/??
- ????public?static?String?getDate(Date?date)?{??
- ????????return?DateToString(date,?DateStyle.YYYY_MM_DD);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的時間。默認HH:mm:ss格式。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?時間?
- ?????*/??
- ????public?static?String?getTime(String?date)?{??
- ????????return?StringToString(date,?DateStyle.HH_MM_SS);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的時間。默認HH:mm:ss格式。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@return?時間?
- ?????*/??
- ????public?static?String?getTime(Date?date)?{??
- ????????return?DateToString(date,?DateStyle.HH_MM_SS);??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的星期。失敗返回null。?
- ?????*?@param?date?日期字符串?
- ?????*?@return?星期?
- ?????*/??
- ????public?static?Week?getWeek(String?date)?{??
- ????????Week?week?=?null;??
- ????????DateStyle?dateStyle?=?getDateStyle(date);??
- ????????if?(dateStyle?!=?null)?{??
- ????????????Date?myDate?=?StringToDate(date,?dateStyle);??
- ????????????week?=?getWeek(myDate);??
- ????????}??
- ????????return?week;??
- ????}??
- ??
- ????/**?
- ?????*?獲取日期的星期。失敗返回null。?
- ?????*?@param?date?日期?
- ?????*?@return?星期?
- ?????*/??
- ????public?static?Week?getWeek(Date?date)?{??
- ????????Week?week?=?null;??
- ????????Calendar?calendar?=?Calendar.getInstance();??
- ????????calendar.setTime(date);??
- ????????int?weekNumber?=?calendar.get(Calendar.DAY_OF_WEEK)?-?1;??
- ????????switch?(weekNumber)?{??
- ????????case?0:??
- ????????????week?=?Week.SUNDAY;??
- ????????????break;??
- ????????case?1:??
- ????????????week?=?Week.MONDAY;??
- ????????????break;??
- ????????case?2:??
- ????????????week?=?Week.TUESDAY;??
- ????????????break;??
- ????????case?3:??
- ????????????week?=?Week.WEDNESDAY;??
- ????????????break;??
- ????????case?4:??
- ????????????week?=?Week.THURSDAY;??
- ????????????break;??
- ????????case?5:??
- ????????????week?=?Week.FRIDAY;??
- ????????????break;??
- ????????case?6:??
- ????????????week?=?Week.SATURDAY;??
- ????????????break;??
- ????????}??
- ????????return?week;??
- ????}??
- ??????
- ????/**?
- ?????*?獲取兩個日期相差的天數?
- ?????*?@param?date?日期字符串?
- ?????*?@param?otherDate?另一個日期字符串?
- ?????*?@return?相差天數?
- ?????*/??
- ????public?static?int?getIntervalDays(String?date,?String?otherDate)?{??
- ????????return?getIntervalDays(StringToDate(date),?StringToDate(otherDate));??
- ????}??
- ??????
- ????/**?
- ?????*?@param?date?日期?
- ?????*?@param?otherDate?另一個日期?
- ?????*?@return?相差天數?
- ?????*/??
- ????public?static?int?getIntervalDays(Date?date,?Date?otherDate)?{??
- ????????date?=?DateUtil.StringToDate(DateUtil.getDate(date));??
- ????????long?time?=?Math.abs(date.getTime()?-?otherDate.getTime());??
- ????????return?(int)time/(24?*?60?*?60?*?1000);??
- ????}??
- }??
DateStyle類
- package?com.util;??
- ??
- public?enum?DateStyle?{??
- ??????
- ????MM_DD("MM-dd"),??
- ????YYYY_MM("yyyy-MM"),??
- ????YYYY_MM_DD("yyyy-MM-dd"),??
- ????MM_DD_HH_MM("MM-dd?HH:mm"),??
- ????MM_DD_HH_MM_SS("MM-dd?HH:mm:ss"),??
- ????YYYY_MM_DD_HH_MM("yyyy-MM-dd?HH:mm"),??
- ????YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd?HH:mm:ss"),??
- ??????
- ????MM_DD_EN("MM/dd"),??
- ????YYYY_MM_EN("yyyy/MM"),??
- ????YYYY_MM_DD_EN("yyyy/MM/dd"),??
- ????MM_DD_HH_MM_EN("MM/dd?HH:mm"),??
- ????MM_DD_HH_MM_SS_EN("MM/dd?HH:mm:ss"),??
- ????YYYY_MM_DD_HH_MM_EN("yyyy/MM/dd?HH:mm"),??
- ????YYYY_MM_DD_HH_MM_SS_EN("yyyy/MM/dd?HH:mm:ss"),??
- ??????
- ????MM_DD_CN("MM月dd日"),??
- ????YYYY_MM_CN("yyyy年MM月"),??
- ????YYYY_MM_DD_CN("yyyy年MM月dd日"),??
- ????MM_DD_HH_MM_CN("MM月dd日?HH:mm"),??
- ????MM_DD_HH_MM_SS_CN("MM月dd日?HH:mm:ss"),??
- ????YYYY_MM_DD_HH_MM_CN("yyyy年MM月dd日?HH:mm"),??
- ????YYYY_MM_DD_HH_MM_SS_CN("yyyy年MM月dd日?HH:mm:ss"),??
- ??????
- ????HH_MM("HH:mm"),??
- ????HH_MM_SS("HH:mm:ss");??
- ??????
- ??????
- ????private?String?value;??
- ??????
- ????DateStyle(String?value)?{??
- ????????this.value?=?value;??
- ????}??
- ??????
- ????public?String?getValue()?{??
- ????????return?value;??
- ????}??
- }??
Week類
- package?com.util;??
- ??
- public?enum?Week?{??
- ??
- ????MONDAY("星期一",?"Monday",?"Mon.",?1),??
- ????TUESDAY("星期二",?"Tuesday",?"Tues.",?2),??
- ????WEDNESDAY("星期三",?"Wednesday",?"Wed.",?3),??
- ????THURSDAY("星期四",?"Thursday",?"Thur.",?4),??
- ????FRIDAY("星期五",?"Friday",?"Fri.",?5),??
- ????SATURDAY("星期六",?"Saturday",?"Sat.",?6),??
- ????SUNDAY("星期日",?"Sunday",?"Sun.",?7);??
- ??????
- ????String?name_cn;??
- ????String?name_en;??
- ????String?name_enShort;??
- ????int?number;??
- ??????
- ????Week(String?name_cn,?String?name_en,?String?name_enShort,?int?number)?{??
- ????????this.name_cn?=?name_cn;??
- ????????this.name_en?=?name_en;??
- ????????this.name_enShort?=?name_enShort;??
- ????????this.number?=?number;??
- ????}??
- ??????
- ????public?String?getChineseName()?{??
- ????????return?name_cn;??
- ????}??
- ??
- ????public?String?getName()?{??
- ????????return?name_en;??
- ????}??
- ??
- ????public?String?getShortName()?{??
- ????????return?name_enShort;??
- ????}??
- ??
- ????public?int?getNumber()?{??
- ????????return?number;??
- ????}??
- }??
我編寫這個util的目的主要是為了解決StringToDate的麻煩,日期的格式有很多,因此僅通過SimpleDateFormat只能格式化一個日期格式,所以我用DateStyle來匹配主流的日期格式,如果有新的日期格式同樣也可以加,但本人并未把所有日期格式都測試了,所以并不保證不出錯,但我保留了傳遞SimpleDateFormat的parttern的方式,因此可以通過這個來解決。
另外,目前這個日期工具類還有個bug,就是如果日期太大(如2300-05-14)或太小的話,自動匹配日期格式的核心算法(getAccurateDate)還是有問題,目前這個版本支持的范圍,大概是:【加100年——當前時間——減100年】,這個bug筆者日后會考慮改進,另外如果大家對日期工具類有什么更好的方法,歡迎隨時與我溝通交流哦!
?
============友情鏈接============
java日期工具類DateUtil-續二?http://blog.csdn.net/wangpeng047/article/details/8295623
java日期工具類DateUtil-續一?http://blog.csdn.net/wangpeng047/article/details/8270466
?