现在的位置: 首页 > 综合 > 正文

java对日期的一些操作

2017年01月18日 ⁄ 综合 ⁄ 共 8006字 ⁄ 字号 评论关闭
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;
		}
	}

抱歉!评论已关闭.