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;
}
}
还没有评论,来说两句吧...