常用时间日期工具类集合

  1. 云栖社区>
  2. 博客>
  3. 正文

常用时间日期工具类集合

匆匆那年! 2016-05-17 13:47:00 浏览683
展开阅读全文
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.StringTokenizer;


import org.apache.mina.proxy.utils.StringUtilities;
import org.apache.tools.ant.util.StringUtils;

public class DateUtil
{
/**
* 默认的日期格式
*/
public static String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static String LONG_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static String NONE_LONG_DATE="00-00-00 00:00:00";
public static String LDAP_DATE_FORMAT = "yyyyMMddHHmmssZ";
public static String NONE_DATE_FORMAT = "yyyyMMddHHmmss";

/**
* 取得当前日期
* @return Date 当前日期
*/
public static Date getCurrentDate() {
return new Date(System.currentTimeMillis());
}

/**
* 返回当前日期对应的默认格式的字符串
* @return String 当前日期对应的字符串
*/
public static String getCurrentStringDate() {
return convertDate2String(getCurrentDate(), DEFAULT_DATE_FORMAT);
}

/**
* 返回当前日期对应的指定格式的字符串
* @param dateFormat - 日期格式
* @return String 当前日期对应的字符串
*/
public static String getCurrentStringDate(String dateFormat) {
return convertDate2String(getCurrentDate(), dateFormat);
}

/**
* 将日期转换成指定格式的字符串
* @param date - 要转换的日期
* @param dateFormat - 日期格式
* @return String 日期对应的字符串
*/
public static String convertDateToString(Date date, String dateFormat) {
if(date == null)
return "";
SimpleDateFormat sdf = null;
if(dateFormat != null && !dateFormat.equals("")) {
try {
sdf = new SimpleDateFormat(dateFormat);
} catch(Exception e) {
e.printStackTrace();
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
}
} else {
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
}
return sdf.format(date);
}

/**
* 将日期转换成指定格式的字符串(格式:yyyy-MM-dd)
* @param date - 要转换的日期
* @return String 日期对应的字符串
*/
public static String convertDateToString(Date date) {
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
return sdf.format(date);
}

/**
* 将LDAP存储的日期字符串转换成日期
* @param stringDate - 要转换的字符串格式的日期
* @return Date 字符串对应的日期
*/
public static Date convertLdapStringToDate(String stringDate) {
if(stringDate != null && stringDate.endsWith("Z")){
stringDate =  stringDate.substring(0, stringDate.length()-1)+"+0800";
}
return convertStringToDate(stringDate, LDAP_DATE_FORMAT);
}

/**
* 将日期转换成ldap存储格式的String类型
* @param date - 要转换的日期
* @return String 日期对应的字符串
*/
public static String convertDateToLdapString(Date date) {
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat(LDAP_DATE_FORMAT);
return sdf.format(date);
}


/**
* 将字符串转换成日期 (格式:yyyy-MM-dd)
* @param stringDate - 要转换的字符串格式的日期
* @return Date 字符串对应的日期
*/
public static Date convertStringToDate(String stringDate) {
return convertStringToDate(stringDate, DEFAULT_DATE_FORMAT);
}


/**
* 将字符串转换成日期
* @param stringDate - 要转换的字符串格式的日期
* @param dateFormat - 要转换的字符串对应的日期格式
* @return Date 字符串对应的日期
*/
public static Date convertStringToDate(String stringDate, String dateFormat) {
SimpleDateFormat sdf = null;
if(dateFormat != null && !dateFormat.equals("")) {
try {
sdf = new SimpleDateFormat(dateFormat);
} catch(Exception e) {
e.printStackTrace();
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
}
} else {
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
}
try {
return sdf.parse(stringDate);
} catch(ParseException pe) {
pe.printStackTrace();
return new Date(System.currentTimeMillis());
}
}

/**
* 将一种格式的日期字符串转换成默认格式的日期字符串(格式:yyyy-MM-dd)
* @param oldDate - 要格式化的日期字符串
* @param oldFormat - 要格式化的日期的格式
* @return String 格式化后的日期字符串
*/
public static String formatStringDate(String oldStringDate, String oldFormat) {
return convertDateToString(convertStringToDate(oldStringDate, oldFormat), DEFAULT_DATE_FORMAT); 
}

/**
* 将一种格式的日期字符串转换成另一种格式的日期字符串
* @param oldDate - 要格式化的日期字符串
* @param oldFormat - 要格式化的日期的格式
* @param newFormat - 格式化后的日期的格式
* @return String 格式化后的日期字符串
*/
public static String formatStringDate(String oldStringDate, String oldFormat, String newFormat) {
return convertDateToString(convertString2Date(oldStringDate, oldFormat), newFormat);
}

/**
* 根据年份和月份判断该月有几天
* @param year - 年份
* @param month - 月份
* @return int
*/
public static int days(int year, int month) {
int total = 30;
switch (month) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
total = 31; break;
case 2 :
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
total = 29;
else
total = 28;
break;
default : break;
}
return total;
}

/**
* 根据年份和月份判断该月的第一天是星期几
* @param year - 年份
* @param month - 月份
* @return int
*/
@SuppressWarnings("deprecation")
public static int firstDayOfWeek(int year, int month) {
Date firstDate = new Date(year - 1900, month - 1, 1);
return firstDate.getDay();
}

/**
* 根据年份和月份判断该月的最后一天是星期几
* @param year - 年份
* @param month - 月份
* @return int
*/
@SuppressWarnings("deprecation")
public static int lastDayOfWeek(int year, int month) {
Date lastDate = new Date(year - 1900, month - 1, days(year, month));
return lastDate.getDay();
}

/**
* 给定一个日期,返回是一周中的第几天
* 星期日为每周的第一天,星期六为每周的最后一天
* */
public   static   int   dayOfWeek(Date   date)   
 {   
         //首先定义一个calendar,必须使用getInstance()进行实例化   
         Calendar   aCalendar=Calendar.getInstance();   
         //里面野可以直接插入date类型   
         aCalendar.setTime(date);   
         //计算此日期是一周中的哪一天   
         int   x=aCalendar.get(Calendar.DAY_OF_WEEK);   
         return   x;   
 } 
/**
* 获取当前年份
* @return int
*/
@SuppressWarnings("deprecation")
public static int getCurrentYear() {
return getCurrentDate().getYear() + 1900;
}

/**
* 获取当前月份(1-12)
* @return int
*/
@SuppressWarnings("deprecation")
public static int getCurrentMonth() {
return getCurrentDate().getMonth() + 1;
}

/**
* 获取给定日期的下一个月的日期,返回格式为yyyy-MM-dd
* @param dateStr - 给定日期
* @param format - 给定日期的格式
* @return String
*/
@SuppressWarnings("deprecation")
public static String getNextMonth(String stringDate, String format) {
Date date = convertStringToDate(stringDate, format);
int year = date.getYear() + 1900;
int month = date.getMonth() + 1;
if(month == 12) {
year = year +1;
month = 1;
} else {
month = month + 1;
}
return year + "-" + (month < 10 ? "0" : "") + month + "-01";
}


/**
* 获取给定日期的下一个月的日期,返回格式为yyyy-MM-dd
* @param dateStr - 给定日期
* @return String
*/
public static String getNextMonth(String stringDate) {
return getNextMonth(stringDate, DEFAULT_DATE_FORMAT);
}

/**
* 获取给定日期的前一天
* @param stringDate - 给定日期
* @param format - 给定日期的格式
* @return String
*/
@SuppressWarnings("deprecation")
public static String getBeforDate(String stringDate, String format) {
Date date = convertStringToDate(stringDate, format);
int year = date.getYear() + 1900;
int month = date.getMonth() + 1;
int day = date.getDate();
if(day == 1) {
if(month == 1) {
return (year - 1) + "-12-31";
} else {
month = month - 1;
day = days(year, month);
return year + "-" + (month < 10 ? "0" : "") + month + "-" + day;
}
} else {
return year + "-" + (month < 10 ? "0" : "") + month + "-" + (day < 11 ? "0" : "") + (day - 1);
}
}


/**
* 获取给定日期的前一天
* @param stringDate - 给定日期
* @return String
*/
public static String getBeforDate(String stringDate) {
return getBeforDate(stringDate, DEFAULT_DATE_FORMAT);
}

/**
* 得到当前日期的前后日期 +为后 -为前
* @param currentDate 当前日期
* @param day_i 
* @param format 日期格式
* @return
*/
public static final String getBefDateString(String currentDate,int day_i,String format){
try{
SimpleDateFormat sdf=new SimpleDateFormat(format);
Date date = sdf.parse(currentDate);
Calendar day=Calendar.getInstance();
day.setTime(date);
day.add(Calendar.DATE,day_i);
return sdf.format(day.getTime());
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 得到一个月的天数
* @param dt 时间格式yyyyMMdd的字符串
*/
@SuppressWarnings("static-access")
public static int getMonthDays(String dt){
    try{
if(dt==null){
    throw new NullPointerException("日期参数为null");
    }else{
    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
    Date date=sdf.parse(dt);
        Calendar cld=Calendar.getInstance();
        cld.setTime(date);
        return cld.getActualMaximum(cld.DAY_OF_MONTH);
    }
    }catch(Exception e){
    e.printStackTrace();
    return -1;
    }
}
/**
* 得到一个月的天数
* @param dt 时间字符串
* @param format 时间格式
*/
@SuppressWarnings("static-access")
public static int getMonthDays(String dt,String format){
    try{
if(dt==null){
    throw new NullPointerException("日期参数为null");
    }else{
    SimpleDateFormat sdf=new SimpleDateFormat(format);
    Date date=sdf.parse(dt);
        Calendar cld=Calendar.getInstance();
        cld.setTime(date);
        return cld.getActualMaximum(cld.DAY_OF_MONTH);
    }
    }catch(Exception e){
    e.printStackTrace();
    return -1;
    }
}
/**
* 得到当前日期的星期
* @param currentDate 当前时间
* @return
*/
@SuppressWarnings("deprecation")
public static final String getDateWeek(String currentDate){
try{
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
Date date = sdf.parse(currentDate);
Integer i = date.getDay();
if(i==0) i = 7;
return i.toString();
}catch(Exception e){
e.printStackTrace();
return null;
}
}


/** 
* 得到这个月的第一天
* @param date 
**/
public static Date getMonthFirstDay(Date date){
String strdate = convertDate2String(date);
strdate = strdate.substring(0,8) + "01";
return convertStringToDate(strdate);
}
/**
* 秒数转化为小时格式 HH:MM:SS
* @param sec 秒数

**/
public static String convertSecToHour(int sec){
String time = "";
int hour = 0;
int minute = 0;
int second = 0;
hour = sec/3600 > 0 ? sec/3600:0;
minute = (sec - hour*3600)/60 > 0 ?(sec - hour*3600)/60:0;
second = sec-hour*3600-minute*60 > 0 ? sec-hour*3600-minute*60 : 0;
String shour = String.valueOf(hour).length() < 2 ? "0"+String.valueOf(hour):String.valueOf(hour);
String sminute = String.valueOf(minute).length()< 2 ? "0"+String.valueOf(minute):String.valueOf(minute);
String ssecond = String.valueOf(second).length()< 2 ? "0"+String.valueOf(second):String.valueOf(second);
time = shour + ":" + sminute + ":" + ssecond;
return time;
}

/**
* 把时间毫秒数转化为时间
* @param stime
* @return
*/
public static final Date millisToDate(String stime) {
long time = Long.parseLong(stime);
   return new Date(time);
}


   
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");


SimpleDateFormat sFullFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


public static final String DATE_SEPARATOR = "-/";


/** 作日期分析之用 */
static StringTokenizer sToken;


/** 将日期变为字符串格式 * */
public String format(GregorianCalendar pCal) {
return sDateFormat.format(pCal.getTime());
}


/**
* 将时间转换成string类型 (格式yyyy-MM-dd)
*/
public String format(Date pDate) {
return sDateFormat.format(pDate);
}


/**
* 将时间转换成string类型 (格式yyyy-MM-dd HH:mm:ss)
*/
public String fullFormat(Date pDate) {
return sFullFormat.format(pDate);
}


/**
* 将字符串格式的日期转换为Calender
**/
public static GregorianCalendar parse2Cal(String pDateStr) {
sToken = new StringTokenizer(pDateStr, DATE_SEPARATOR);
int vYear = Integer.parseInt(sToken.nextToken());
// GregorianCalendar的月份是从0开始算起的,变态!!
int vMonth = Integer.parseInt(sToken.nextToken()) - 1;
int vDayOfMonth = Integer.parseInt(sToken.nextToken());
return new GregorianCalendar(vYear, vMonth, vDayOfMonth);
}


/**
* 将字符串类型的日期(yyyy-MM-dd)转换成Date
**/
public Date parseToDate(String pDate) {
try {
return sDateFormat.parse(pDate);
} catch (ParseException ex) {
return null;
}
}


/**
* 给定两个时间相差的月数,String版
**/
public static int monthsBetween(String pFormerStr, String pLatterStr) {
GregorianCalendar vFormer = parse2Cal(pFormerStr);
GregorianCalendar vLatter = parse2Cal(pLatterStr);
return monthsBetween(vFormer, vLatter);
}




/**
* 给定两个时间相差的月数
*/
public static int monthsBetween(GregorianCalendar pFormer,
GregorianCalendar pLatter) {
GregorianCalendar vFormer = pFormer, vLatter = pLatter;
boolean vPositive = true;
if (pFormer.before(pLatter)) {
vFormer = pFormer;
vLatter = pLatter;
} else {
vFormer = pLatter;
vLatter = pFormer;
vPositive = false;
}


int vCounter = 0;
while (vFormer.get(vFormer.YEAR) != vLatter.get(vLatter.YEAR)
|| vFormer.get(vFormer.MONTH) != vLatter.get(vLatter.MONTH)) {
vFormer.add(Calendar.MONTH, 1);
vCounter++;
}
if (vPositive)
return vCounter;
else
return -vCounter;
}

/**
* 返回当前时间对应的字符串
* @return String
*/
public static String getCurrentStringTimeMillis(){
return String.valueOf(System.currentTimeMillis());
}

/**
* 获取给定时间对应的字符串
* @param date - 给定日期
* @return String
*/
public static String convertDateToStringTimeMillis(Date date){
return String.valueOf(date.getTime());
}

/**
* 获取给定字符串对应的时间
* @param stringTimeMills - 给定字符串
*/
public static Date convertStringTimeMillisToDate(String stringTimeMills){
return new Date(Long.valueOf(stringTimeMills).longValue());

}

/**
* 封装了时间段查询
* 如传进来 2007-09-09 和2007-09-09
* 返回 2007-09-09 00:00:00 和2007-09-09 23:59:59
* 说明,如果两个参数都不为null,则同上
* 如果都为null,则默认为前后一星期
* */
public static String[] getQueryDate(String startdate,String enddate){
String []s=new String[2];
if(!trimToEmpty(startdate).trim().equals("") &&(!trimToEmpty(enddate).trim().equals(""))){
s[0]=startdate+" 00:00:00";
s[1]=enddate+" 23:59:59";
}else if(!trimToEmpty(startdate).equals("") &&(trimToEmpty(enddate).trim().equals(""))){ 
s[0]=nowLongFormat().substring(0,10)+" 00:00:00";
s[1]=s[0].substring(0,10)+" 23:59:59";
}else if(trimToEmpty(startdate).trim().equals("") &&(trimToEmpty(enddate).trim().equals(""))){//都为空
s[1]=nowLongFormat().substring(0,10)+" 23:59:59";
s[0]=afterNDay(-7).substring(0,10)+" 00:00:00";
}else{
s[0]=s[1]=null;
}

return s;
}


public static String[] getQueryCurrentDate(String startdate,String enddate,int after){
String []s=new String[2];
if(!trimToEmpty(startdate).trim().equals("") &&(!trimToEmpty(enddate).trim().equals(""))){
s[0]=startdate;
s[1]=enddate;
}else if(trimToEmpty(startdate).trim().equals("") &&(trimToEmpty(enddate).trim().equals(""))){//都为空
s[0]=s[1]=afterNDay(after).substring(0,10);
}else{
s[0]=s[1]=null;
}

return s;
}

public static String[] getQueryDate(String startdate,String enddate,int after){
String []s=new String[2];
if(!trimToEmpty(startdate).trim().equals("") &&(!trimToEmpty(enddate).trim().equals(""))){
s[0]=startdate;
s[1]=enddate;
}else if(trimToEmpty(startdate).trim().equals("") &&(trimToEmpty(enddate).trim().equals(""))){//都为空
s[0]=afterNDay(after-30).substring(0,10);
s[1]=afterNDay(after).substring(0,10);
}else{
s[0]=s[1]=null;
}
return s;
}

/**
* 转换当前时间为string类型 (格式yyyy-MM-dd HH:mm:ss)
*/
public static String nowLongFormat() {
return DateUtil.convertDate2String(new Date(), LONG_DATE_FORMAT);
}


/**
* 当前日期前几天或者后几天的日期
* @param n 单位天
*/
public static String afterNDay(int n){
Calendar c=Calendar.getInstance();
DateFormat df=new SimpleDateFormat(LONG_DATE_FORMAT);
c.setTime(new Date());
c.add(Calendar.DATE,n);
Date d2=c.getTime();
String s=df.format(d2);
return s;
}


/**
* 转换string类型时间为时间类型(格式yyyy-MM-dd HH:mm:ss)
* @param stringDate
*/
public static Date convertStringToLongDate(String stringDate) {
return convertStringToDate(stringDate, LONG_DATE_FORMAT);
}


/**
* 用于处理excel导出
* hzc EDIT 2007-12-25
* */
public static String convertToString(String obj) {
SimpleDateFormat sdf = null;
if(obj != null && !obj.equals("")) {
if(obj.trim().length()<=10){
try {
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
} catch(Exception e) {}
}else{
try {
sdf = new SimpleDateFormat(LONG_DATE_FORMAT);
} catch(Exception e) {}
}
} else {
sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
}
try {
return sdf.format(sdf.parse(obj));
} catch(ParseException pe) {
return "";
}
}

/**
* 判断obj是否为时间类型 目前只判断是否 符合yyyy-MM-dd这种格式
*/
public static boolean isDate(String obj){
if(obj != null && !obj.equals("")){
if(obj.indexOf("~")>-1) return false;
try {
SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
//if(obj.length()==7&&obj.indexOf("-")==4 && Integer.parseInt(obj.substring(0,4))>1900 ) return true;
sdf.parse(obj);
return true;
} catch(Exception e) {
return false;
}
}else return false;
}

private static String trimToEmpty(String a){
if(a == null || a.trim().length() == 0){
return "";
}
return a;
}

/**
* 该方法获取当前时间的时分秒  实用场景 当记录保存时间时自动截取到了日,小时数没有了。则可以根据该方法获取当前的小时数用来补充前面带空格
* zhl add
* @return
*/
public static String getSystemHHMMSS(){
return convertDateToString(getCurrentDate(), LONG_DATE_FORMAT).substring(10, 19);
}


/**
* 获取当前时间的前几天
* @param date 当前时间
* @param days 正数时间往前推 负数时间往后移 (单位天)
*/
public static Date minusDays(Date date, int days){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH , c.get(Calendar.DAY_OF_MONTH) - days);
return c.getTime();
}

/**
* 得到当前日期的前后日期 +为后 -为前 分钟
* @param mm_i 单位分钟
* @return
*/
public static final String getBefDateMMString(String currentDate,int mm_i,String format){
try{
SimpleDateFormat sdf=new SimpleDateFormat(format);
Date date = sdf.parse(currentDate);
Calendar day=Calendar.getInstance();
day.setTime(date);
day.add(Calendar.MINUTE,mm_i);
return sdf.format(day.getTime());
}catch(Exception e){
e.printStackTrace();
return null;
}
}

}

网友评论

登录后评论
0/500
评论
匆匆那年!
+ 关注