java 时间转化工具类

来源:互联网 发布:网络文明绘画图片大全 编辑:程序博客网 时间:2024/05/16 04:41
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 0
原创粉丝点击