Java處理日期的兩個工具方法,太實用了!
在日常開發中我們經常要對日期進行處理,今天就分享兩個處理日期的工具方法,不多說了,上代碼
public class DateUtils{
/**
* yy-MM-dd
*/
public static final String yy_MM_dd = "yy-MM-dd";
/**
* yyyy-MM
*/
public static final String yyyy_MM = "yyyy-MM";
/**
* 計算開始時間結束時間相差多少天的日期集合
* @param dateStart 開始時間,如:2017-11-11
* @param dateEnd 結束時間 如:2017-11-13
* @param style 將字元串格式化,DateUtils.yyyy_MM_dd
Advertisements
* @return 輸出結果:[2017-11-11, 2017-11-12, 2017-11-13]
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static ArrayList getDayList(String dateStart, String dateEnd,String style) {
ArrayList list = new ArrayList();
SimpleDateFormat myFormatter = new SimpleDateFormat(style);
Date date1 = null;
Date date2 = null;
Advertisements
try {
date1 = myFormatter.parse(dateStart);
date2 = myFormatter.parse(dateEnd);
} catch (Exception ex1) {
System.out.println("日期轉換格式應和傳入的日期格式一致" + ex1.toString());
}
long day = (date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000)+ 1;
long date3 = date1.getTime();
for (int i = 0; i < day; i++) {
String dateStr = myFormatter.format((new Date(date3)));
list.add(dateStr);
date3 = date3 + 24 * 60 * 60 * 1000;
}
return list;
}
/**
* 傳入年-月,算出中間隔了幾個月
* @param dateStart 開始時間 年-月
* @param dateEnd 結束時間 年-月
* @param style
* @return
* @throws ParseException
*
* 例如傳入參數 "2017-11","2018-02","yyyy-MM",
* 輸出的結果是2017-11,2017-12,2018-01,2018-02
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List getYearAndMonthList(String dateStart, String dateEnd, String style) {
List list=new ArrayList();
SimpleDateFormat sdf=new SimpleDateFormat(style);
try {
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
c1.setTime(sdf.parse(dateStart));
c2.setTime(sdf.parse(dateEnd));
int year =c2.get(Calendar.YEAR)-c1.get(Calendar.YEAR);
int monthDistance;
//開始日期若小月結束日期
if(year<0){
year=-year;
monthDistance = year*12+c1.get(Calendar.MONTH)-c2.get(Calendar.MONTH);
}
monthDistance = year*12+c2.get(Calendar.MONTH)-c1.get(Calendar.MONTH);
int cyear;
int cmonth;
for(int i=0;i<monthDistance+1;i++){
//獲取開始時間的年份
cyear=c1.get(c1.YEAR);
//這裡的月份要加1才是開始時間的月份
c1.add(c1.MONTH, 1);
//這裡第一次加完之後是開始時間的月份
cmonth=c1.get(c1.MONTH);
//0代表12月
if(cmonth==0){
cmonth=12;
}
String yearAndMonth;
if(cmonth<10){
yearAndMonth=cyear+""+"-"+"0"+cmonth+"";
}else{
yearAndMonth=cyear+""+"-"+cmonth+"";
}
list.add(yearAndMonth);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
接下來測試下這兩個方法:
public class text {
public static void main(String[] args) {
String beginTime="2018-01-10";
String endTime="2018-01-16";
List dayList = DateUtils.getDayList(beginTime,endTime,DateUtils.yyyy_MM_dd);
System.out.println(dayList);
}
輸出結果:
public class text {
public static void main(String[] args) {
String beginTime="2017-08";
String endTime="2018-01";
List yearAndMonthList = DateUtils.getYearAndMonthList(beginTime,endTime,DateUtils.yyyy_MM);
System.out.println(yearAndMonthList);
}
}
輸出結果:
相信大家看到這裡都知道怎麼用了,也希望大家有什麼好的建議也可以在評論區提提,你們的關注就是我每天更新的動力。好的,今天就分享這些。