【Java】指定兩個日期相隔的天數日期及月份日期
阿新 • • 發佈:2018-11-05
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { Test t = new Test(); t.month(); } public void day() throws ParseException { DateFormat d = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(d.parse(d.format(new Date()))); c.set(Calendar.DATE, c.get(Calendar.DATE)-30);//當前30天前的日期 String t = d.format(c.getTime()); System.out.println(t); System.out.println(d.format(new Date())); String starDay = t; String endDay = d.format(new Date()); Date date1 = d.parse(endDay); Date date2 = d.parse(starDay); //計算兩個日期間有多少天 int a = (int) ((date1.getTime() - date2.getTime()) / (1000*3600*24)); System.out.println(a); //遍歷出兩個日期中間的日期 for (int i = 0; i <= a; i++) { c.setTime(d.parse(starDay)); c.set(Calendar.DATE, c.get(Calendar.DATE)+i); String day = d.format(c.getTime()); System.out.println(i+" 當前:"+day); } } public void month() throws ParseException { DateFormat d = new SimpleDateFormat("yyyy-MM"); Calendar c = Calendar.getInstance(); c.setTime(d.parse(d.format(new Date()))); c.set(Calendar.MONTH, c.get(Calendar.MONTH)-12);//當前月份前12個月的日期 String t = d.format(c.getTime()); System.out.println(t); System.out.println(d.format(new Date())); String starDay = t; String endDay = d.format(new Date()); Date date1 = d.parse(endDay); Date date2 = d.parse(starDay); Calendar end = Calendar.getInstance(); Calendar start = Calendar.getInstance(); end.setTime(date1); start.setTime(date2); if (!start.after(end)) { //計算兩個日期間相差的月份 int subMonthCount = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR) == 0) ? end.get(Calendar.MONTH) - start.get(Calendar.MONTH) //同一年 : ((end.get(Calendar.YEAR) - start.get(Calendar.YEAR) >= 2) //年數差超過2年 ? (end.get(Calendar.YEAR) - start.get(Calendar.YEAR) - 1) * 12 + start.getActualMaximum(Calendar.MONTH) - start.get(Calendar.MONTH) + end.get(Calendar.MONTH) + 1 : start.getActualMaximum(Calendar.MONTH) - start.get(Calendar.MONTH)+ end.get(Calendar.MONTH) + 1); //年數差為1,Calendar.get(MONTH) 第一月是0,所以+1 System.out.println(subMonthCount); //遍歷出兩個日期間的月份日期 for (int i = 0; i <= subMonthCount; i++) { c.setTime(d.parse(starDay)); c.set(Calendar.MONTH, c.get(Calendar.MONTH)+i); String day = d.format(c.getTime()); System.out.println("當前:"+day); } } } }