`
duan1823a
  • 浏览: 89573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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时间工具类

    java 时间 datatime 工具类

    Java 时间工具类

    Java 时间工具类详解,主要包含了对时间操作的一些工具方法!将日期对象按照某种格式进行转换,将传入的日期对象按照yyyy-MM-dd格式转换成字符串返回,将插入的字符串按格式转换成对应的日期对象

    JAVA时间工具类(计算法定工作日工时等)

    JAVA时间工具类(计算法定工作日工时):计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),...

    Java时间工具类

    Java对时间进行操作的工具类,包括各种时间格式转化的方法以及一些时间比较登方法。

    Java日期工具类,Java时间工具类,Java时间格式化

    NULL 博文链接:https://fanshuyao.iteye.com/blog/2355386

    java时间工具类按照年月周维度在时间区间内输出时间点

    java时间工具类按照年月周维度在时间区间内输出时间点

    java 时间 工具类

    就是工作中,遇到的很多日期时间操作,整理了个工具类

    java代码-java时间工具类代码合集

    java代码-java时间工具类代码合集 ——学习参考资料:仅用于个人学习使用!

    java时间工具类,基本上全面的包括常用的关于时间的处理

    没事写了一个关于java时间处理的工具类,很简单

    DateUtils Java时间工具类

    非常好用的Date工具类 1、计算两个日期之间相差的天数 2、判断日期是否为周六日 3、获取当前周开始日期 4、获取当前周结束日期 5、判断年份是否是闰年 6、根据年份和月份计算天数 7、判断日期为该年的第几周 等等

    时间工具类

    时间类型方面很好用的工具类,包括时间类型的转化与计算等

    【强2】30个java工具类

    使用java工具类可有效的提高开发效率! 没有CSDN积分的朋友到这里源头下载:http://www.javacs.cn/bbs/thread-382-1-1.html 感谢支持 ...[工具类] 时间工具TimeUtil.java [工具类] 连数据库ConnectDB.java

    java 时间工具类 DateUtil

    这是一个功能很强大的时间的工具类,是本人在做项目中,积累的,当然也有cope别人的.我是集成了所有好用的类,拿出来分享,希望能帮助大家!!!! 如果还没有实现的功能,请大家留言!我会尽快的更新,实现你们想要的功能.

    30个java工具类

    [工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页...[工具类] 时间工具TimeUtil.java [工具类] 连数据库ConnectDB.java

    HttpUtil.java时间工具类

    日期与时间的相互转换,日期与时间戳的相互转换的一个工具类。

    时间工具包

    JAVA时间工具类,包含时间转换,获取当前时间,日期,周等

    常用的java工具类

    4.[工具类] 时间工具TimeUtil.java 5.[工具类] 通信服务端simpleServer 6.[工具类] 使用Java程序来实现HTTP文件的队列下载 .java 7.[工具类] 文件操作工具类 .java 8.[工具类] 序列化保存为XML文件的工具类 .java 9....

Global site tag (gtag.js) - Google Analytics