java:calendar类及一些比较实用的utils(二)
在这里将我在项目中用到的一些关于使用Calendar
的utils分享出来,只是一部分,后期遇到好的通用方法会继续添加,以和大家交流学习,如果你还不熟悉这个类的使用,但是急需某个util,可以加群:413066190 (Java&xiaowei,Let's go! )互相帮助!
1.
1 /** 2 * 查询一段时间内的所有的日期 3 * @param dBegin 4 * @param dEnd 5 * @return 6 */ 7 public static List<Date> findDates(Date dBegin, Date dEnd) { 8 List dateList = new ArrayList(); 9 dateList.add(dBegin); 10 Calendar calBegin = Calendar.getInstance(); 11 // 使用给定的 Date 设置此 Calendar 的时间 12 calBegin.setTime(dBegin); 13 Calendar calEnd = Calendar.getInstance(); 14 // 使用给定的 Date 设置此 Calendar 的时间 15 calEnd.setTime(dEnd); 16 // 测试此日期是否在指定日期之后 17 while (dEnd.after(calBegin.getTime())) { 18 // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 19 calBegin.add(Calendar.DAY_OF_MONTH, 1); 20 dateList.add(calBegin.getTime()); 21 } 22 return dateList; 23 }
2.
1 /** 2 * 获得最近的12个月的月份(包含当前月份) 3 * @return 4 */ 5 public static String[] getLast12Months(){ 6 String[] last12Months = new String[12]; 7 Calendar cal = Calendar.getInstance(); 8 cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1); //要先+1,才能把本月的算进去 9 for(int i=0; i<12; i++){ 10 cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)-1); //逐次往前推1个月 11 last12Months[11-i] = cal.get(Calendar.YEAR)+ "-" + (cal.get(Calendar.MONTH)+1); 12 } 13 14 return last12Months; //返回数组形式的 15 }
3.
1 /** 2 * 获取指定月份的第一天和最后一天 3 * @param str 4 * @return 5 */ 6 public static Map<String, String> getFirstday_Lastday_Month(String st) throws Exception { 7 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 8 SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM"); 9 Calendar calendar = Calendar.getInstance(); 10 Date d = df1.parse(st); 11 calendar.setTime(d); 12 Date theDate = calendar.getTime(); 13 14 //月第一天 15 GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); 16 gcLast.setTime(theDate); 17 gcLast.set(Calendar.DAY_OF_MONTH, 1); 18 String day_first = df.format(gcLast.getTime()); 19 StringBuffer str = new StringBuffer().append(day_first); 20 day_first = str.toString(); 21 22 //月最后一天 23 calendar.add(Calendar.MONTH, 1); //加一个月 24 calendar.set(Calendar.DATE, 1); 25 calendar.add(Calendar.DATE, -1); 26 String day_last = df.format(calendar.getTime()); 27 StringBuffer endStr = new StringBuffer().append(day_last); 28 day_last = endStr.toString(); 29 30 Map<String, String> map = new HashMap<String, String>(); 31 map.put("first", day_first); 32 map.put("last", day_last); 33 return map; 34 /* 35 * 此处返回map形式,使用方式,如下: 36 * Map<String, String> map = getFirstday_Lastday_Month(str); 37 * map.get("first") //第一天 38 * map.get("last") //最后一天 39 */ 40 }
4.
1 /** 2 * 根据指定日期获取前一天的日期 3 * 4 * @param today 5 * @return 6 */ 7 public static String getYesterdayByToday(String day) { 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 9 Date date = null; 10 try { 11 if (day != null && !"".equals(day)) { 12 date = sdf.parse(day); 13 } else { 14 date = sdf.parse(sdf.format(new Date())); 15 } 16 Calendar cal = Calendar.getInstance(); 17 cal.setTime(date); 18 cal.add(Calendar.DATE, -1); 19 String yesterday = sdf.format(cal.getTime()); 20 return yesterday; 21 } catch (ParseException e) { 22 e.printStackTrace(); 23 return ""; 24 } 25 }
5.
1 /** 2 * 获取当前时间最近24小时的时间 3 * 4 * @return 5 */ 6 public static String[] getDateHour(String dateStr) { 7 String[] strs = new String[24]; 8 try { 9 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH"); 10 11 Date date = null; 12 if (dateStr != null && !"".equals(dateStr)) { 13 date = sdf.parse(dateStr); 14 } else { 15 date = sdf.parse(sdf.format(new Date())); 16 } 17 18 Calendar cd = Calendar.getInstance(); 19 cd.setTime(date); //当前日期 20 // cd.add(Calendar.HOUR_OF_DAY, 1); 21 for (int i = 0; i < 24; i++) { 22 cd.add(Calendar.HOUR_OF_DAY, -1); 23 strs[i] = sdf.format(cd.getTime()); 24 } 25 } catch (ParseException e) { 26 e.printStackTrace(); 27 } 28 29 return strs; 30 }
6.
1 /** 2 * 获取传入时间的前一天时间 3 * 4 * @param day 5 * @return 6 */ 7 public static String getYesterdayHour(String day) { 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 9 Date date = null; 10 try { 11 if (day != null && !"".equals(day)) { 12 date = sdf.parse(day); 13 } else { 14 date = sdf.parse(sdf.format(new Date())); 15 } 16 Calendar cal = Calendar.getInstance(); 17 cal.setTime(date); 18 cal.add(Calendar.DATE, -1); 19 String yesterday = sdf.format(cal.getTime()); 20 return yesterday; 21 } catch (ParseException e) { 22 e.printStackTrace(); 23 return ""; 24 } 25 26 }
7.
1 /** 2 * 将(1/26/15 11:59 PM)型时间格式转换 3 * 4 * @param dateStr 5 * @return 6 */ 7 public static String parseDateFromCsv(String dateStr) { 8 String dateString = null; 9 try { 10 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 11 SimpleDateFormat sdf2 = new SimpleDateFormat("M/dd/yy hh:mm a", Locale.US); 12 13 Date date = sdf2.parse(dateStr); 14 dateString = sdf1.format(date); 15 16 } catch (Exception e) { 17 e.printStackTrace(); 18 } 19 return dateString; 20 }
8.
1 /** 2 * 获取当前时间,测试发现jdk直接获取时间可能会存在时差,需要通过代码来设置时区 3 * 4 * @return 5 */ 6 public static String getCurrTime() { 7 TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); 8 TimeZone.setDefault(tz); 9 return new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()); 10 }
9.其他待补充,
愿无岁月可回首 且以深情共白头