java 时间工具类

package com.tmg.aec.common.until;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author 段佐才
 */
public class DateUtils {
	
	/**
	 * 传入年月,得到此月天数
	 * @param endDay
	 * @param format 格式
	 * @return String
	 */
	public static String getEndDays(String endDay, String format){
		Date date;
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		try {
			date = dateFormat.parse(endDay);
			
			// 得到当天日期
			Calendar cal = Calendar.getInstance();
			// 设置指定日期
			cal.setTime(date);
			cal.set(Calendar.DAY_OF_MONTH,1);
			cal.roll(Calendar.DAY_OF_MONTH,-1);
			
			dateFormat = new SimpleDateFormat("dd");
			String rel = dateFormat.format(cal.getTime());
			
			return rel;
		} catch (ParseException e) {
			System.out.println("获取当月最后一天出错");
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 传入年月,得到此月最后一天
	 * @param endDay
	 * @param format 格式
	 * @param newFormat 生成后的格式
	 * @return Date
	 */
	public static Date getEndDayToDate(String endDay, String format, String newFormat){
		Date date;
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		try {
			date = dateFormat.parse(endDay);
			
			// 得到当天日期
			Calendar cal = Calendar.getInstance();
			// 设置指定日期
			cal.setTime(date);
			cal.set(Calendar.DAY_OF_MONTH,1);
			cal.roll(Calendar.DAY_OF_MONTH,-1);
			
			dateFormat = new SimpleDateFormat(newFormat);
			String rel = dateFormat.format(cal.getTime());
			
			return dateFormat.parse(rel);
		} catch (ParseException e) {
			System.out.println("获取当月最后一天出错");
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 得到此月最后一天
	 * @param day
	 * @return
	 */
	public static Date getEndDayToDate(Date day){
		String format = "yyyyMMdd hh:mm:ss";
		String day1 = dateFormatToString(day, format);
		return getEndDayToDate(day1, format, format);
	}
	
	/**
	 * 得到这个月第一天
	 * @param day
	 * @return
	 */
	public static Date getBeginDayToDate(Date day){
		return dateFormatToDate(day, "yyyyMM");
	}

	/**
	 * 传入年月,得到此月最后一天
	 * @param endDay
	 * @param format 格式
	 * @param newFormat 生成后的格式
	 * @return String
	 */
	public static String getEndDayToString(String endDay, String format, String newFormat){
		Date date;
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		try {
			date = dateFormat.parse(endDay);
			
			// 得到当天日期
			Calendar cal = Calendar.getInstance();
			// 设置指定日期
			cal.setTime(date);
			cal.set(Calendar.DAY_OF_MONTH,1);
			cal.roll(Calendar.DAY_OF_MONTH,-1);
			
			dateFormat = new SimpleDateFormat(newFormat);
			String rel = dateFormat.format(cal.getTime());
			
			return rel;
		} catch (ParseException e) {
			System.out.println("获取当月最后一天出错");
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 把时间转换成指定格式
	 * @param date
	 * @param format
	 * @return Date
	 */
	public static Date dateFormatToDate(String date, String format){
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		
		Date rel = null;
		try {
			rel = dateFormat.parse(date);
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateFormatToDate(String date, String format) ");
			e.printStackTrace();
		}
		return rel;
	}

	/**
	 * 把时间转换成指定格式
	 * @param date
	 * @param format
	 * @return Date
	 */
	public static Date dateFormatToDate(Date date, String format){
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		
		String rel = dateFormat.format(date);
		return dateFormatToDate(rel, format);
	}
	
	/**
	 * 把时间转换成指定格式
	 * @param date
	 * @param format
	 * @return String
	 */
	public static String dateFormatToString(Date date, String format){
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		return dateFormat.format(date);
	}
	
	/**
	 * 把 String 时间转换成指定格式
	 * @param date
	 * @param oldFormat
	 * @param newFormat
	 * @return Date
	 */
	public static Date dateFormatToDate(String date, String oldFormat, String newFormat){
		SimpleDateFormat dateFormat = new SimpleDateFormat(oldFormat);
		Date d = null;
		String d2 = null;
		try {
			d = dateFormat.parse(date);
			dateFormat = new SimpleDateFormat(newFormat);
			d2 = dateFormat.format(d);
			d = dateFormat.parse(d2);
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateFormatToDate(Date date, String format) in line 148");
			e.printStackTrace();
		}
		
		//return dateFormatToString(d,newFormat);
		return new Date(d.getTime());
	}

	/**
	 * 把 String 时间转换成指定格式
	 * @param date
	 * @param oldFormat
	 * @param newFormat
	 * @return String
	 */
	public static String dateFormatToString(String date, String oldFormat, String newFormat){
		SimpleDateFormat dateFormat = new SimpleDateFormat(oldFormat);
		Date d = null;
		try {
			d = dateFormat.parse(date);
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateFormatToString(Date date, String format) in line 162");
			e.printStackTrace();
		}
		
		return dateFormatToString(d,newFormat);
	}
	
	/**
	 * 相加指定天数
	 * @param date
	 * @param num 天数
	 * @return Date
	 */
	public static Date dateAddDays(Date date, Long num){
		Long time = date.getTime();
		time += (num * 24 * 60 * 60 * 1000); 
		return new Date(time);
	}

	/**
	 * 相加指定天数
	 * @param date
	 * @param date 的格式
	 * @param num 天数
	 * @return Date
	 */
	public static Date dateAddDays(String date, String type, Long num){
		SimpleDateFormat dateFormat = new SimpleDateFormat(type);
		Long time = 0L;
		try {
			time = dateFormat.parse(date).getTime();
			time += (num * 24 * 60 * 60 * 1000); 
			return new Date(time);
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateAddDays(String date, String type, int num) in line 200");
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 相加指定天数
	 * @param date
	 * @param num 天数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateAddDays(Date date, Long num, String returnType){
		SimpleDateFormat dateFormat = new SimpleDateFormat(returnType);
		Long time = date.getTime();
		Date date_ = null;
		
		time += (num * 24 * 60 * 60 * 1000); 
		
		String temp = dateFormat.format(new Date(time));
		
		return temp;
	}

	/**
	 * 相加指定天数
	 * @param date
	 * @param type date 的格式
	 * @param num 天数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateAddDays(String date, String type, Long num, String returnType){
		SimpleDateFormat dateFormat = new SimpleDateFormat(returnType);
		SimpleDateFormat dateFormat_ = new SimpleDateFormat(type);
		
		Long time = 0L;
		try {
			time = dateFormat_.parse(date).getTime();
			time += (num * 24 * 60 * 60 * 1000); 
			Date date_ = null;
			String temp = dateFormat.format(new Date(time));
			return temp;
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateAddDays(String date, String type, int num, String returnType) in line 241");
			e.printStackTrace();
		}
		
		return null;
	}

	/**
	 * 减去指定天数
	 * @param date
	 * @param num 天数
	 * @return Date
	 */
	public static Date dateMinusDays(Date date, Long num){
		Long time = date.getTime();
		time -= (num * 24 * 60 * 60 * 1000);
		return new Date(time);
	}

	/**
	 * 减去指定天数
	 * @param date
	 * @param type date 的格式
	 * @param num 天数
	 * @return Date
	 */
	public static Date dateMinusDays(String date, String type, Long num){
		SimpleDateFormat dateFormat = new SimpleDateFormat(type);
		
		try {
			Long time = dateFormat.parse(date).getTime();
			time -= (num * 24 * 60 * 60 * 1000); 
			return new Date(time);
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateMinusDays(String date, String type, int num) in line 280");
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 减去指定天数
	 * @param date
	 * @param num 天数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateMinusDays(Date date, Long num, String returnType){
		SimpleDateFormat dateFormat = new SimpleDateFormat(returnType);
		Long time = date.getTime();
		Date date_ = null;
		
		time -= (num * 24 * 60 * 60 * 1000); 
		
		String temp = dateFormat.format(new Date(time));
		
		return temp;
	}

	/**
	 * 减去指定天数
	 * @param date
	 * @param type date 的格式
	 * @param num 天数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateMinusDays(String date, String type, Long num, String returnType){
		SimpleDateFormat dateFormat = new SimpleDateFormat(returnType);
		SimpleDateFormat dateFormat_ = new SimpleDateFormat(type);
		
		try {
			Long time = dateFormat_.parse(date).getTime();
			
			time -= (num * 24 * 60 * 60 * 1000); 
			
			String temp = dateFormat.format(new Date(time));
			
			return temp;
		} catch (ParseException e) {
			System.out.println("日期格式转换出错:DateUtils.dateMinusDays(String date, String type, iLongnum, String returnType) in line 327");
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 相加指定月数
	 * @param date
	 * @param num 月数
	 * @return Date
	 */
	public static Date dateAddMonths(Date date, Long num){
		StringBuffer time_new;
		try {
			String y = dateFormatToString(date, "yyyy");
			String m = dateFormatToString(date, "MM");
			String d = dateFormatToString(date, "dd");
			String hmsS = dateFormatToString(date, "HH:mm:ss:SSSS");
			
			int b = (int) (Integer.parseInt(m) + num);
			
			if(b > 12) {
				int y_ = b / 12;
				b = b % 12;
				if(b == 0) b = 12;
				
				y = String.valueOf(Integer.parseInt(y) + y_);
			}
			if(b < 10)
				m = "0" + b;
			else
				m = String.valueOf(b);
			time_new = new StringBuffer(y + m + d + " " + hmsS);
			return dateFormatToDate(time_new.toString(), "yyyyMMdd HH:mm:ss:SSSS","yyyyMMdd HH:mm:ss:SSSS");
		} catch (NumberFormatException e) {
			System.out.println("日期格式转换出错:lines in 369 at DateUtils.dateAddMonths(Date date, int num)");
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 相加指定月数
	 * @param date
	 * @param date 的格式
	 * @param num 月数
	 * @return Date
	 */
	public static Date dateAddMonths(String date, String type, Long num){
		Date date_ = dateFormatToDate(date, type, type);
		return dateAddMonths(date_, num);
	}
	
	/**
	 * 相加指定月数
	 * @param date
	 * @param num 月数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateAddMonths(Date date, Long num, String returnType){
		Date d = dateAddMonths(date, num);
		return dateFormatToString(d, returnType);
	}
	
	/**
	 * 相加指定月数
	 * @param date
	 * @param type date 的格式
	 * @param num 月数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateAddMonths(String date, String type, Long num, String returnType){
		Date date_ = dateFormatToDate(date, type, returnType);
		return dateAddMonths(date_, num, returnType);
	}
	
	/**
	 * 减去指定月数
	 * @param date
	 * @param num 月数
	 * @return Date
	 */
	public static Date dateMinusMonths(Date date, Long num){
		StringBuffer time_new;
		try {
			String y = dateFormatToString(date, "yyyy");
			String m = dateFormatToString(date, "MM");
			String d = dateFormatToString(date, "dd");
			String hmsS = dateFormatToString(date, "HH:mm:ss:SSSS");
			
			int m_ = (int) (num % 12);
			Long y_ = num / 12;
			
			m_ = Integer.parseInt(m) - m_;
			if(m_ < 1) {
				y_ += 1 ;
				m_ = m_ + 12;
				if(m_ == 0) m_ = 12;
				
			}
			y = String.valueOf(Integer.parseInt(y) - y_);
			if(m_ < 10)
				m = "0" + m_;
			else
				m = String.valueOf(m_);
			time_new = new StringBuffer(y + m + d + " " + hmsS);
			return dateFormatToDate(time_new.toString(), "yyyyMMdd HH:mm:ss:SSSS","yyyyMMdd HH:mm:ss:SSSS");
		} catch (NumberFormatException e) {
			System.out.println("日期格式转换出错:lines in 369 at DateUtils.dateAddMonths(Date date, int num)");
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 减去指定月数
	 * @param date
	 * @param type date 的格式
	 * @param num 月数
	 * @return Date
	 */
	public static Date dateMinusMonths(String date, String type, Long num){
		Date d = dateFormatToDate(date, type, "yyyyMMdd HH:mm:ss:SSSS");
		return dateMinusMonths(d, num);
	}
	
	/**
	 * 减去指定月数
	 * @param date
	 * @param num 月数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateMinusMonths(Date date, Long num, String returnType){
		Date d = dateMinusMonths(date, num);
		
		return dateFormatToString(d, returnType);
	}
	
	/**
	 * 减去指定月数
	 * @param date
	 * @param type date 的格式
	 * @param num 月数
	 * @param returnType 返回的格式
	 * @return String
	 */
	public static String dateMinusMonths(String date, String type, Long num, String returnType){
		Date date_ = dateMinusMonths(date, type, num);
		return dateFormatToString(date_, returnType);
	}
	
	/**
	 * 得到星期几
	 * @param date
	 * @return
	 */
	public static String getWeek(Date date) {
		  return dateFormatToString(date, "EEEE");
	}

	/**
	 * 得到星期几
	 * @param date
	 * @param type
	 * @return
	 */
	public static String getWeek(String date, String type) {
		return dateFormatToString(dateFormatToDate(date, type), "EEEE");
	}
	
	/**
	 * 得到时间差
	 * @param begin
	 * @param end
	 * @return 月数
	 */
	public static int dateMinusDateForMonths(Date begin, Date end){
		int m1 = Integer.parseInt(dateFormatToString(begin, "MM"));
		int m2 = Integer.parseInt(dateFormatToString(end, "MM"));

		int y1 = Integer.parseInt(dateFormatToString(begin, "yyyy"));
		int y2 = Integer.parseInt(dateFormatToString(end, "yyyy"));
		
		int result = (y2*12 + m2) - (y1*12 + m1);
		
		return result>0?result:result*-1;
	}
	
	/**
	 * 得到时间差
	 * @param begin
	 * @param end
	 * @return 天数
	 */
	public static long dateMinusDateForDays(Date begin, Date end){
		if(begin.getTime() > end.getTime() )
			return (begin.getTime() - end.getTime())/(24*60*60*1000);
		else return (end.getTime() - begin.getTime())/(24*60*60*1000);
	}
	
	/**
	 * 把时间段切分成每个月如:2010/1/2,2010/3/4 --> [1/2,1/31],[2/1,2/28],[3/1,3/4] 
	 * @param begin
	 * @param end
	 * @return 月数组's:[begin, end]
	 */
	public static List<Date[]> splitDateToDateList(Date begin, Date end){
		List<Date[]> ds = new ArrayList();
		if (dateFormatToDate(begin, "yyyyMM").getTime() > dateFormatToDate(end, "yyyyMM").getTime()) 
			return null;
		else if(dateFormatToDate(begin, "yyyyMM").getTime() == dateFormatToDate(end, "yyyyMM").getTime()){
			Date[] d = new Date[2]; 
			d[0] = begin;
			d[1] = end;
			ds.add(d);
			return ds;
		}else {
			int months = dateMinusDateForMonths(begin, end);
			for(int i = 0 ; i <= months ; i++){
				Date[] d = new Date[2];
				Date now = dateAddMonths(begin, Long.parseLong(i+""));
				if(i == 0)
					d[0] = begin;
				else
					d[0] = getBeginDayToDate(now);
				
				if(i == months)
					d[1] = end;
				else
					d[1] = getEndDayToDate(now);
				
				ds.add(d);
			}
			return ds;
		}
	}

	/**
	 * 把时间段切分成每个月如:2010/1/2,2010/3/4 --> [1/2,1/31],[2/1,2/28],[3/1,3/4] 
	 * @param begin
	 * @param end
	 * @param type 格式
	 * @return 月数组's:[begin, end]
	 */
	public static List<String[]> splitDateToStringList(Date startTime,
			Date endTime, String type) {
		List<Date[]> f_d = splitDateToDateList(startTime, endTime);
		
		List<String[]> f_s = new ArrayList();
		
		for(int i = 0; i < f_d.size(); i++){
			String[] e = new String[2];
			
			e[0] = dateFormatToString(f_d.get(i)[0], type);
			e[1] = dateFormatToString(f_d.get(i)[1], type);
			
			f_s.add(e);
		}
		return f_s;
	}
	
	public static void main(String[] args) throws ParseException {
		/*Date end = new Date();
		Date begin = dateMinusDays(end, 66L);
		
		List<String[]> ds = splitDateToStringList(begin, end, "yyyyMMdd");
		
		for(String[] d:ds){
			for(String dd:d){
				System.out.println(dd);
			}
			System.out.println("..............");
		}*/
	}

}

你可能感兴趣的:(java,F#)