java 时间转化工具类

package cn.my.utils;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/** 时间工具类<p>
 *
 * @version 1.0<br>
 */
public class DateUtil {
	
	/**
	 * 获得两个时间字符的时间差
	 * @param startTime
	 * @param endTime
	 * @return
	 * @throws ParseException 
	 * Integer
	 */
	public static Integer distanceBySE(String startTime,String endTime){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		//通过字符串创建两个日期对象
		Date firstDate = null;
		Date secondDate = null;
		try {
			firstDate = sdf.parse(endTime);
			secondDate = sdf.parse(startTime);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		//得到两个日期对象的总毫秒数
		long firstDateMilliSeconds = firstDate.getTime();
		long secondDateMilliSeconds = secondDate.getTime();
		
		//得到两者之差
		long firstMinusSecond = firstDateMilliSeconds - secondDateMilliSeconds;
		
		//毫秒转为秒
		long milliSeconds = firstMinusSecond;
		int totalSeconds = (int)(milliSeconds / 1000);
		
		//得到总天数
		Integer days = totalSeconds / (3600*24);
		return days;
	}
	/**
	 * 把格式为 年-月-日的时间转成年月日<p>
	 * @param data
	 * @return <p>
	 * String
	 */
	public static String dataStr(String data){
		String[] str = data.split("-");
		String str1= "";
		for(int i =0 ;i<str.length; i++){
			str1= str1+str[i];
		}
		if(str1.length() >0){
			return str1.trim();
		}
		return null;
	}
	/**
	 * 把格式为yyyy-MM-dd的转化成yyyyMMdd<p>
	 * @param date
	 * @return <p>
	 * String
	 */
	public static String dateByNum(String date){
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
		return format.format(strToDate(date,"yyyy-MM-dd"));
		
	}
	
	/**
	 * 把格式为yyyy-MM-dd的转化成yyyyMMdd<p>
	 * @param date
	 * @return <p>
	 * String
	 */
	public static String dateMonthByNum(String date){
		SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
		return format.format(strToDate(date,"yyyy-MM"));
		
	}
	/**
	 * 把格式为yyyy-MM的时间获取开始时间和结算时间<p>
	 * @param monthDate
	 * @return 20140401_20140430<p>
	 * String
	 */
	public static String monthByStartAndEndTime(String monthDate){
				String[] str =monthDate.split("-");
				//日历
				Calendar c = Calendar.getInstance();
				//设置这个月的第一天
				c.set(Integer.parseInt(str[0]), Integer.parseInt(str[1])-1, 1);
				//获取这个月一共有多少天
				int lastDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
				String date =str[0]+str[1]+"01"+"_"+str[0]+str[1]+lastDay+"";
		
		return date;
	}
	public static String getWeekDate(String date){
		String[] str = date.split("-");
		return weekGetDate(str[0],str[1],Integer.parseInt(str[2]));
	}
	
	/**
	 * 获得这周的开始时间
	 * @param year
	 * @param month
	 * @param week
	 * @return 
	 * Date
	 */
	public static Date getProParamDate(String year , String month , int week){
		String time = weekGetDate(year, month, week);
		String[] times = time.split("_");
		SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd");
		Date datatime = null;
		try {
			datatime =  formatDate.parse(times[0]);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return datatime;
	}
	
	/**
	 * 根据年月周获取开始时间和结束时间<p>
	 * @param year 年
	 * @param month 月
	 * @param week 周
	 * @return 开始时间和结算时间的字符串<p>
	 * String
	 */
	public static String weekGetDate(String year,String month,int week){
		 // 存储周数所对应的天数
		Map<Integer, String> map =new HashMap<Integer, String>();

		//日历
		Calendar c = Calendar.getInstance();
		//设置这个月的第一天
		c.set(Integer.parseInt(year), Integer.parseInt(month)-1, 1);
		//获取这个月的第一天
		int firstWeek=	c.get(Calendar.DAY_OF_WEEK)-1;
		//获取这个月一共有多少天
		int lastDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
		double a;
		  if(firstWeek ==0){
			  a =7;
		  }else{
			  a=firstWeek;
		  }
		  //计算这个月一共有多少周
		int weekNum = (int) Math.ceil((lastDay-(7-a+1))/7)+1;
		double startDay = 1;
		//循环获取这月的日期
		for(int i=1;i<=weekNum;i++){
			if(i==1){
				map.put(i, year+"-"+month+"-"+(int)startDay+"_"+year+"-"+month+"-"+(int)((7-a)+1));
				startDay = (7-a)+1;
			}else{
				map.put(i, year+"-"+month+"-"+(int)(startDay+1)+"_"+year+"-"+month+"-"+(int)(startDay+7));
				startDay=	startDay+7;
				if(startDay>lastDay){
					startDay=	startDay-7;
					map.put(i, year+"-"+month+"-"+(int)(startDay+1)+"_"+year+"-"+month+"-"+(int)lastDay);
					break;
				}
			}
		}
		//根据周数获取开始时间和结算时间
		return map.get(week);
	}
	/**
     * 将指定格式的字符串转换为日期类型,如果格式与字符串不匹配,则返回null。
     * @param dateStr 待转换的字符串
     * @param format 日期格式
     * @return 转换后的日期对象
     */
    public static Date strToDate(String dateStr, String format) {
        //构造制定格式format的SimpleDateFormat对象。
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        //进行转换,这里要传入new ParsePosition(0),否则是抛出异常,而不是返回null
        return formatter.parse(dateStr, new ParsePosition(0));
    }
    public static String strToString(String str){
    	String strs =null;
    	if(str.length()==4){
    		strs ="00"+str;
    	}else if(str.length()==5){
    		strs ="0"+str;
    	}else if(str.length()==3){
    		strs ="000"+str;
    	}else if(str.length()==2){
    		strs ="0000"+str;
    	}else if(str.length()==1){
    		strs ="00000"+str;
    	}else if(str.length()==0){
    		strs ="000000";
    	}
    	else{
    		strs =str;
    	}
		return strs;
    }
    public static Date getSpecifiedDay(Date date){
    	Calendar c = Calendar.getInstance();
    	 c.setTime(date);  
         int day=c.get(Calendar.DATE);  
         c.set(Calendar.DATE,day-1);
         Date endDate = c.getTime();
		return endDate; 
    }
    public static Date strDate(String str,String format){
    	Date date =null;
    	if(str.length()==4){
    		date = DateUtil.strToDate("00"+str,format);
    	}else if(str.length()==5){
    		date = DateUtil.strToDate("0"+str,format);
    	}
    	else{
    		date = DateUtil.strToDate(str,format);
    	}
		return date;
    }
    /**
     * 一个日期加几天后的日期<p>
     * @param time 要加以前的日期
     * @param addDayNum 要加的天数
     * @return 已经加过的日期<p>
     * Date
     */
    public static Date getDateAddDay(String time,int addDayNum){
    	try {
    		Date date= (new SimpleDateFormat("yyyyMMdd")).parse(time);
    		Calendar cal = Calendar.getInstance();
    		cal.setTime(date);
    		cal.add(Calendar.DATE, addDayNum);
    		return cal.getTime();
    	} catch (ParseException e) {
    		return null;
    	}
    }
    /**
     * 根据省份证号码获取出生日期
     * @param iDCard 身份证号码
     * @return 出生日期
     */
    public static Date getBirthDayByiDCard(String iDCard){
    	String strDate = null;
    	if(iDCard.length()==18){
    		strDate =iDCard.substring(6,14);
    	}else{
    		strDate = iDCard.substring(6,12);
    		strDate = "19"+strDate;
    	}
		return strDate!= null? strToDate(strDate,"yyyyMMdd"):null;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值