package studyListAndMap; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class JavasHelloWorld extends JavaA{ public static void main(String[] args) { int currentMaxDays = getCurrentMonthDay(); int maxDaysByDate = getDaysByYearMonth(2012, 11); String week = getDayOfWeekByDate("2012-12-25"); System.out.println("本月天数:" + currentMaxDays); System.out.println("2012年11月天数:" + maxDaysByDate); System.out.println("2012-12-25是:" + week); } /** * 获取当月的 天数 * */ public static int getCurrentMonthDay() { Calendar a = Calendar.getInstance(); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 根据年 月 获取对应的月份 天数 * */ public static int getDaysByYearMonth(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month - 1); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 根据日期 找到对应日期的 星期 */ public static String getDayOfWeekByDate(String date) { String dayOfweek = "-1"; try { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); Date myDate = myFormatter.parse(date); SimpleDateFormat formatter = new SimpleDateFormat("E"); String str = formatter.format(myDate); dayOfweek = str; } catch (Exception e) { System.out.println("错误!"); } return dayOfweek; } }
package net.zerosoft.common.util; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.stereotype.Component; @Component public class GetEveryDate { private static transient int gregorianCutoverYear = 1582; /** 闰年中每月天数 */ private static final int[] DAYS_P_MONTH_LY= {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /** 非闰年中每月天数 */ private static final int[] DAYS_P_MONTH_CY= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /** 代表数组里的年、月、日 */ private static final int Y = 0, M = 1, D = 2; /** * 将代表日期的字符串分割为代表年月日的整形数组 * @param date * @return */ public static int[] splitYMD(String date){ date = date.replace("-", ""); int[] ymd = {0, 0, 0}; ymd[Y] = Integer.parseInt(date.substring(0, 4)); ymd[M] = Integer.parseInt(date.substring(4, 6)); ymd[D] = Integer.parseInt(date.substring(6, 8)); return ymd; } /** * 检查传入的参数代表的年份是否为闰年 * @param year * @return */ public static boolean isLeapYear(int year) { return year >= gregorianCutoverYear ? ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0))) : (year%4 == 0); } /** * 日期加1天 * @param year * @param month * @param day * @return */ private static int[] addOneDay(int year, int month, int day){ if(isLeapYear( year )){ day++; if( day > DAYS_P_MONTH_LY[month -1 ] ){ month++; if(month > 12){ year++; month = 1; } day = 1; } }else{ day++; if( day > DAYS_P_MONTH_CY[month -1 ] ){ month++; if(month > 12){ year++; month = 1; } day = 1; } } int[] ymd = {year, month, day}; return ymd; } /** * 将不足两位的月份或日期补足为两位 * @param decimal * @return */ public static String formatMonthDay(int decimal){ DecimalFormat df = new DecimalFormat("00"); return df.format( decimal ); } /** * 将不足四位的年份补足为四位 * @param decimal * @return */ public static String formatYear(int decimal){ DecimalFormat df = new DecimalFormat("0000"); return df.format( decimal ); } /** * 计算两个日期之间相隔的天数 * @param begin * @param end * @return * @throws ParseException */ public static long countDay(String begin,String end){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date beginDate , endDate; long day = 0; try { beginDate= format.parse(begin); endDate= format.parse(end); day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000); } catch (ParseException e) { e.printStackTrace(); } return day; } /** * 以循环的方式计算日期 * @param beginDate endDate * @param days * @return */ public static List<String> getEveryday(String beginDate , String endDate){ long days = countDay(beginDate, endDate); int[] ymd = splitYMD( beginDate ); List<String> everyDays = new ArrayList<String>(); everyDays.add(beginDate); for(int i = 0; i < days; i++){ ymd = addOneDay(ymd[Y], ymd[M], ymd[D]); everyDays.add(formatYear(ymd[Y])+"-"+formatMonthDay(ymd[M])+"-"+formatMonthDay(ymd[D])); } return everyDays; } /* public static void main(String[] args) { List<String> list = GetEveryDate.getEveryday("2013-12-01", "2014-02-13"); for (String result : list) { System.out.println(result); } }*/ }
/** * 获得两个日期之前相差的月份<br> * * @param start * @param e * @return * @throws ParseException */ public int getMonth(String reStartDate, String reEndDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date start = sdf.parse(reStartDate); Date end = sdf.parse(reEndDate); if (start.after(end)) { Date t = start; start = end; end = t; } Calendar startCalendar = Calendar.getInstance(); startCalendar.setTime(start); Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(end); Calendar temp = Calendar.getInstance(); temp.setTime(end); temp.add(Calendar.DATE, 1); int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) == 1)) { return year * 12 + month + 1; } else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) { return year * 12 + month; } else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) { return year * 12 + month; } else { return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month); } }
/** * 得到某年某月第几个星期几的日期 * @param year * 年份 * @param month * 月份 * @param weekOfMonth * 这个月的第几周 * @param dayOfWeek * 星期几 * @return */ public String weekDateToData(int year, int month, int weekOfMonth, int dayOfWeek) { Calendar c = Calendar.getInstance(); // 计算出 x年 y月 1号 是星期几 c.set(year, month - 1, 1); // 如果i_week_day =1 的话 实际上是周日 int i_week_day = c.get(Calendar.DAY_OF_WEEK); int sumDay = 0; // dayOfWeek+1 就是星期几(星期日 为 1) if (i_week_day == 1) { sumDay = (weekOfMonth - 1) * 7 + dayOfWeek + 1; } else { sumDay = 7 - i_week_day + 1 + (weekOfMonth - 1) * 7 + dayOfWeek + 1; } // 在1号的基础上加上相应的天数 c.set(Calendar.DATE, sumDay); SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd"); return sf2.format(c.getTime()); }
/** * 得到指定时间段中的所有周,以及每周的每天都是周几和日期是多少? * * @param start * @param e * @return * @throws ParseException * */ public List<Date> getWorkDay(String reStartDate,String reEndDate,String isWeek){ List<Date> list = new ArrayList<Date>(); Calendar c_begin = new GregorianCalendar(); Calendar c_end = new GregorianCalendar(); DateFormatSymbols dfs = new DateFormatSymbols(); String[] weeks = dfs.getWeekdays();//2013-09-10 System.out.println(reStartDate.substring(0, 4)+":"+reStartDate.substring(5, 7)+":"+reStartDate.substring(8,10)); c_begin.set(Integer.parseInt(reStartDate.substring(0, 4)), Integer.parseInt(reStartDate.substring(5, 7))>=10?Integer.parseInt(reStartDate.substring(5, 7))-1:Integer.parseInt(reStartDate.substring(6, 7))-1, Integer.parseInt(reStartDate.substring(8,10))>=10?Integer.parseInt(reStartDate.substring(8,10)):Integer.parseInt(reStartDate.substring(9,10))); //Calendar的月从0-11,所以4月是3. c_end.set(Integer.parseInt(reEndDate.substring(0, 4)), Integer.parseInt(reEndDate.substring(5, 7))>=10?Integer.parseInt(reEndDate.substring(5, 7))-1:Integer.parseInt(reEndDate.substring(6, 7))-1, Integer.parseInt(reEndDate.substring(8,10))>=10?Integer.parseInt(reEndDate.substring(8,10)):Integer.parseInt(reEndDate.substring(9,10))); //Calendar的月从0-11,所以5月是4. int count = 1; c_end.add(Calendar.DAY_OF_YEAR, 1); //结束日期下滚一天是为了包含最后一天 if(StringUtils.isBlank(isWeek)){//每天——》工作日 while(c_begin.before(c_end)){ //System.out.println("第"+count+"周 日期:"+new java.sql.Date(c_begin.getTime().getTime())+","+weeks[c_begin.get(Calendar.DAY_OF_WEEK)]); if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ count++; } c_begin.add(Calendar.DAY_OF_YEAR, 1); if("星期六".equals(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])||"星期日".equals(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])){ continue; } list.add(new java.sql.Date(c_begin.getTime().getTime())); } list.remove(list.size() - 1); return list; }else{//每星期 Map<Integer,String> map = new HashMap<Integer,String>(); List<String> weekList = new ArrayList<String>(); map.put(1, "星期一"); map.put(2, "星期二"); map.put(3, "星期三"); map.put(4, "星期四"); map.put(5, "星期五"); map.put(6, "星期六"); map.put(0, "星期七"); String [] isWeekNumber = isWeek.split(","); for(int j=0;j<isWeekNumber.length;j++){ weekList.add(map.get(Integer.parseInt(isWeekNumber[j]))); } while(c_begin.before(c_end)){ //System.out.println("第"+count+"周 日期:"+new java.sql.Date(c_begin.getTime().getTime())+","+weeks[c_begin.get(Calendar.DAY_OF_WEEK)]); if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ count++; } c_begin.add(Calendar.DAY_OF_YEAR, 1); if(!weekList.contains(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])){//取得星期所对应的日期 continue; } list.add(new java.sql.Date(c_begin.getTime().getTime())); } return list; } }
java对日期的一些操作
最新推荐文章于 2022-04-16 11:04:00 发布