java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.junit.Test; public class TestDateUtil { //1、获取当月第一天 @Test public void testForDate(){ //规定返回日期格式 SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar=Calendar.getInstance(); Date theDate=calendar.getTime(); GregorianCalendar gcLast=(GregorianCalendar)Calendar.getInstance(); gcLast.setTime(theDate); //设置为第一天 gcLast.set(Calendar.DAY_OF_MONTH, 1); String day_first=sf.format(gcLast.getTime()); //打印本月第一天 System.out.println(day_first); } //2、获取当月最后一天 @Test public void testForDatelast(){ //获取Calendar Calendar calendar=Calendar.getInstance(); //设置日期为本月最大日期 calendar.set(Calendar.DATE, calendar.getActualMaximum(calendar.DATE)); //设置日期格式 SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd"); String ss=sf.format(calendar.getTime()); System.out.println(ss+" 23:59:59"); } //3、非常简单和实用的获取本月第一天和最后一天 @Test public void testt(){ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 String first = format.format(c.getTime()); System.out.println("===============本月first day:"+first); //获取当前月最后一天 Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); String last = format.format(ca.getTime()); System.out.println("===============本月last day:"+last); } //4、获取上个月的第一天 @Test public void getBeforeFirstMonthdate()throws Exception{ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar=Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, 1); System.out.println("上个月第一天:"+format.format(calendar.getTime())); } //5、获取上个月的最后一天 @Test public void getBeforeLastMonthdate()throws Exception{ SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar=Calendar.getInstance(); int month=calendar.get(Calendar.MONTH); calendar.set(Calendar.MONTH, month-1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); System.out.println("上个月最后一天:"+sf.format(calendar.getTime())); } 6、获取当前日期的前一周或者前一个月时间 public static String getFirstDate(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Calendar cl = Calendar.getInstance(); // cl.setTime(dateNow); // cl.add(Calendar.DAY_OF_YEAR, -1); //一天 // cl.add(Calendar.WEEK_OF_YEAR, -1); //一周 cl.add(Calendar.MONTH, -1); //从现在算,之前一个月,如果是2个月,那么-1-----》改为-2 Date dateFrom = cl.getTime(); return sdf.format(dateFrom); } @Test public void testStartDate(){ System.out.println("当前日期往前推一个月是:"+getFirstDate()); //如果当前日期是2015.11.08,那么打印日期是:20151008 } }
java获取当天,前天,明天,本周,本月,本年的开始日期时间和结束日期时间
import java.sql.Timestamp; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.ArrayList; 7 import java.util.Calendar; 8 import java.util.Date; 9 import java.util.GregorianCalendar; 10 import java.util.List; 11 12 public class DateUtils { 13 //获取当天的开始时间 14 public static java.util.Date getDayBegin() { 15 Calendar cal = new GregorianCalendar(); 16 cal.set(Calendar.HOUR_OF_DAY, 0); 17 cal.set(Calendar.MINUTE, 0); 18 cal.set(Calendar.SECOND, 0); 19 cal.set(Calendar.MILLISECOND, 0); 20 return cal.getTime(); 21 } 22 //获取当天的结束时间 23 public static java.util.Date getDayEnd() { 24 Calendar cal = new GregorianCalendar(); 25 cal.set(Calendar.HOUR_OF_DAY, 23); 26 cal.set(Calendar.MINUTE, 59); 27 cal.set(Calendar.SECOND, 59); 28 return cal.getTime(); 29 } 30 //获取昨天的开始时间 31 public static Date getBeginDayOfYesterday() { 32 Calendar cal = new GregorianCalendar(); 33 cal.setTime(getDayBegin()); 34 cal.add(Calendar.DAY_OF_MONTH, -1); 35 return cal.getTime(); 36 } 37 //获取昨天的结束时间 38 public static Date getEndDayOfYesterDay() { 39 Calendar cal = new GregorianCalendar(); 40 cal.setTime(getDayEnd()); 41 cal.add(Calendar.DAY_OF_MONTH, -1); 42 return cal.getTime(); 43 } 44 //获取明天的开始时间 45 public static Date getBeginDayOfTomorrow() { 46 Calendar cal = new GregorianCalendar(); 47 cal.setTime(getDayBegin()); 48 cal.add(Calendar.DAY_OF_MONTH, 1); 49 50 return cal.getTime(); 51 } 52 //获取明天的结束时间 53 public static Date getEndDayOfTomorrow() { 54 Calendar cal = new GregorianCalendar(); 55 cal.setTime(getDayEnd()); 56 cal.add(Calendar.DAY_OF_MONTH, 1); 57 return cal.getTime(); 58 } 59 //获取本周的开始时间 60 public static Date getBeginDayOfWeek() { 61 Date date = new Date(); 62 if (date == null) { 63 return null; 64 } 65 Calendar cal = Calendar.getInstance(); 66 cal.setTime(date); 67 int dayofweek = cal.get(Calendar.DAY_OF_WEEK); 68 if (dayofweek == 1) { 69 dayofweek += 7; 70 } 71 cal.add(Calendar.DATE, 2 - dayofweek); 72 return getDayStartTime(cal.getTime()); 73 } 74 //获取本周的结束时间 75 public static Date getEndDayOfWeek(){ 76 Calendar cal = Calendar.getInstance(); 77 cal.setTime(getBeginDayOfWeek()); 78 cal.add(Calendar.DAY_OF_WEEK, 6); 79 Date weekEndSta = cal.getTime(); 80 return getDayEndTime(weekEndSta); 81 } 82 //获取本月的开始时间 83 public static Date getBeginDayOfMonth() { 84 Calendar calendar = Calendar.getInstance(); 85 calendar.set(getNowYear(), getNowMonth() - 1, 1); 86 return getDayStartTime(calendar.getTime()); 87 } 88 //获取本月的结束时间 89 public static Date getEndDayOfMonth() { 90 Calendar calendar = Calendar.getInstance(); 91 calendar.set(getNowYear(), getNowMonth() - 1, 1); 92 int day = calendar.getActualMaximum(5); 93 calendar.set(getNowYear(), getNowMonth() - 1, day); 94 return getDayEndTime(calendar.getTime()); 95 } 96 //获取本年的开始时间 97 public static java.util.Date getBeginDayOfYear() { 98 Calendar cal = Calendar.getInstance(); 99 cal.set(Calendar.YEAR, getNowYear()); 100 // cal.set 101 cal.set(Calendar.MONTH, Calendar.JANUARY); 102 cal.set(Calendar.DATE, 1); 103 104 return getDayStartTime(cal.getTime()); 105 } 106 //获取本年的结束时间 107 public static java.util.Date getEndDayOfYear() { 108 Calendar cal = Calendar.getInstance(); 109 cal.set(Calendar.YEAR, getNowYear()); 110 cal.set(Calendar.MONTH, Calendar.DECEMBER); 111 cal.set(Calendar.DATE, 31); 112 return getDayEndTime(cal.getTime()); 113 } 114 //获取某个日期的开始时间 115 public static Timestamp getDayStartTime(Date d) { 116 Calendar calendar = Calendar.getInstance(); 117 if(null != d) calendar.setTime(d); 118 calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); 119 calendar.set(Calendar.MILLISECOND, 0); 120 return new Timestamp(calendar.getTimeInMillis()); 121 } 122 //获取某个日期的结束时间 123 public static Timestamp getDayEndTime(Date d) { 124 Calendar calendar = Calendar.getInstance(); 125 if(null != d) calendar.setTime(d); 126 calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59); 127 calendar.set(Calendar.MILLISECOND, 999); 128 return new Timestamp(calendar.getTimeInMillis()); 129 } 130 //获取今年是哪一年 131 public static Integer getNowYear() { 132 Date date = new Date(); 133 GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); 134 gc.setTime(date); 135 return Integer.valueOf(gc.get(1)); 136 } 137 //获取本月是哪一月 138 public static int getNowMonth() { 139 Date date = new Date(); 140 GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); 141 gc.setTime(date); 142 return gc.get(2) + 1; 143 } 144 //两个日期相减得到的天数 145 public static int getDiffDays(Date beginDate, Date endDate) { 146 147 if (beginDate == null || endDate == null) { 148 throw new IllegalArgumentException("getDiffDays param is null!"); 149 } 150 151 long diff = (endDate.getTime() - beginDate.getTime()) 152 / (1000 * 60 * 60 * 24); 153 154 int days = new Long(diff).intValue(); 155 156 return days; 157 } 158 //两个日期相减得到的毫秒数 159 public static long dateDiff(Date beginDate, Date endDate) { 160 long date1ms = beginDate.getTime(); 161 long date2ms = endDate.getTime(); 162 return date2ms - date1ms; 163 } 164 //获取两个日期中的最大日期 165 public static Date max(Date beginDate, Date endDate) { 166 if (beginDate == null) { 167 return endDate; 168 } 169 if (endDate == null) { 170 return beginDate; 171 } 172 if (beginDate.after(endDate)) { 173 return beginDate; 174 } 175 return endDate; 176 } 177 //获取两个日期中的最小日期 178 public static Date min(Date beginDate, Date endDate) { 179 if (beginDate == null) { 180 return endDate; 181 } 182 if (endDate == null) { 183 return beginDate; 184 } 185 if (beginDate.after(endDate)) { 186 return endDate; 187 } 188 return beginDate; 189 } 190 //返回某月该季度的第一个月 191 public static Date getFirstSeasonDate(Date date) { 192 final int[] SEASON = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 }; 193 Calendar cal = Calendar.getInstance(); 194 cal.setTime(date); 195 int sean = SEASON[cal.get(Calendar.MONTH)]; 196 cal.set(Calendar.MONTH, sean * 3 - 3); 197 return cal.getTime(); 198 } 199 //返回某个日期下几天的日期 200 public static Date getNextDay(Date date, int i) { 201 Calendar cal = new GregorianCalendar(); 202 cal.setTime(date); 203 cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i); 204 return cal.getTime(); 205 } 206 //返回某个日期前几天的日期 207 public static Date getFrontDay(Date date, int i) { 208 Calendar cal = new GregorianCalendar(); 209 cal.setTime(date); 210 cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i); 211 return cal.getTime(); 212 } 213 //获取某年某月到某年某月按天的切片日期集合(间隔天数的日期集合) 214 public static List getTimeList(int beginYear, int beginMonth, int endYear, 215 int endMonth, int k) { 216 List list = new ArrayList(); 217 if (beginYear == endYear) { 218 for (int j = beginMonth; j <= endMonth; j++) { 219 list.add(getTimeList(beginYear, j, k)); 220 221 } 222 } else { 223 { 224 for (int j = beginMonth; j < 12; j++) { 225 list.add(getTimeList(beginYear, j, k)); 226 } 227 228 for (int i = beginYear + 1; i < endYear; i++) { 229 for (int j = 0; j < 12; j++) { 230 list.add(getTimeList(i, j, k)); 231 } 232 } 233 for (int j = 0; j <= endMonth; j++) { 234 list.add(getTimeList(endYear, j, k)); 235 } 236 } 237 } 238 return list; 239 } 240 //获取某年某月按天切片日期集合(某个月间隔多少天的日期集合) 241 public static List getTimeList(int beginYear, int beginMonth, int k) { 242 List list = new ArrayList(); 243 Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1); 244 int max = begincal.getActualMaximum(Calendar.DATE); 245 for (int i = 1; i < max; i = i + k) { 246 list.add(begincal.getTime()); 247 begincal.add(Calendar.DATE, k); 248 } 249 begincal = new GregorianCalendar(beginYear, beginMonth, max); 250 list.add(begincal.getTime()); 251 return list; 252 } 253 }
1 //获取某年某月的第一天日期 2 public static Date getStartMonthDate(int year, int month) { 3 Calendar calendar = Calendar.getInstance(); 4 calendar.set(year, month - 1, 1); 5 return calendar.getTime(); 6 } 7 8 //获取某年某月的最后一天日期 9 public static Date getEndMonthDate(int year, int month) { 10 Calendar calendar = Calendar.getInstance(); 11 calendar.set(year, month - 1, 1); 12 int day = calendar.getActualMaximum(5); 13 calendar.set(year, month - 1, day); 14 return calendar.getTime(); 15 }
根据当前日期获得所在周的日期区间(周一和周日日期)
public String getTimeInterval(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } // System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期 // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); String imptimeBegin = sdf.format(cal.getTime()); // System.out.println("所在周星期一的日期:" + imptimeBegin); cal.add(Calendar.DATE, 6); String imptimeEnd = sdf.format(cal.getTime()); // System.out.println("所在周星期日的日期:" + imptimeEnd); return imptimeBegin + "," + imptimeEnd; }
根据当前日期获得上周的日期区间(上周周一和周日日期)
public String getLastTimeInterval() { Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1; int offset1 = 1 - dayOfWeek; int offset2 = 7 - dayOfWeek; calendar1.add(Calendar.DATE, offset1 - 7); calendar2.add(Calendar.DATE, offset2 - 7); // System.out.println(sdf.format(calendar1.getTime()));// last Monday String lastBeginDate = sdf.format(calendar1.getTime()); // System.out.println(sdf.format(calendar2.getTime()));// last Sunday String lastEndDate = sdf.format(calendar2.getTime()); return lastBeginDate + "," + lastEndDate; }
获取一周开始到结束的list集合
public static List<Date> findDates(Date dBegin, Date dEnd) { List lDate = new ArrayList(); lDate.add(dBegin); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.DAY_OF_MONTH, 1); lDate.add(calBegin.getTime()); } return lDate; }