当前位置: 代码迷 >> Web前端 >> 时间处置类
  详细解决方案

时间处置类

热度:518   发布时间:2012-09-05 15:19:34.0
时间处理类
public class DateUtil 

    //默认显示日期的格式 
    public static final String DATAFORMAT_STR = "yyyy-MM-dd"; 
     
    //默认显示日期的格式 
    public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM"; 
     
    //默认显示日期时间的格式 
    public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss"; 
     
    //默认显示简体中文日期的格式 
    public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日"; 
     
    //默认显示简体中文日期时间的格式 
    public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH时mm分ss秒"; 
     
    //默认显示简体中文日期时间的格式 
    public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH时mm分"; 
     
    private static DateFormat dateFormat = null; 
     
    private static DateFormat dateTimeFormat = null; 
     
    private static DateFormat zhcnDateFormat = null; 
     
    private static DateFormat zhcnDateTimeFormat = null; 
    static 
    { 
        dateFormat = new SimpleDateFormat(DATAFORMAT_STR); 
        dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR); 
        zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR); 
        zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR); 
    } 
     
    private static DateFormat getDateFormat(String formatStr) 
    { 
        if (formatStr.equalsIgnoreCase(DATAFORMAT_STR)) 
        { 
            return dateFormat; 
        } 
        else 
            if (formatStr.equalsIgnoreCase(DATATIMEF_STR)) 
            { 
                return dateTimeFormat; 
            } 
            else 
                if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR)) 
                { 
                    return zhcnDateFormat; 
                } 
                else 
                    if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR)) 
                    { 
                        return zhcnDateTimeFormat; 
                    } 
                    else 
                    { 
                        return new SimpleDateFormat(formatStr); 
                    } 
    } 
     
    /**
     * 按照默认显示日期时间的格式"yyyy-MM-dd HH:mm:ss",转化dateTimeStr为Date类型
     * dateTimeStr必须是"yyyy-MM-dd HH:mm:ss"的形式
     * @param dateTimeStr
     * @return
     */ 
    public static Date getDate(String dateTimeStr) 
    { 
        return getDate(dateTimeStr, DATATIMEF_STR); 
    } 
     
    /**
     * 按照默认formatStr的格式,转化dateTimeStr为Date类型
     * dateTimeStr必须是formatStr的形式
     * @param dateTimeStr
     * @param formatStr
     * @return
     */ 
    public static Date getDate(String dateTimeStr, String formatStr) 
    { 
        try 
        { 
            if (dateTimeStr == null || dateTimeStr.equals("")) 
            { 
                return null; 
            } 
            DateFormat sdf = getDateFormat(formatStr); 
            java.util.Date d = sdf.parse(dateTimeStr); 
            return d; 
        } 
        catch (ParseException e) 
        { 
            throw new RuntimeException(e); 
        } 
    } 
     
    /**
     * 将YYYYMMDD转换成Date日期
     * @param date
     * @return
     * @throws BusinessException
     */ 
    public static Date transferDate(String date) throws Exception 
    { 
        if (date == null || date.length() < 1) 
            return null; 
         
        if (date.length() != 
            throw new Exception("日期格式错误"); 
        String con = "-"; 
         
        String yyyy = date.substring(0, 4); 
        String mm = date.substring(4, 6); 
        String dd = date.substring(6,
         
        int month = Integer.parseInt(mm); 
        int day = Integer.parseInt(dd); 
        if (month < 1 || month > 12 || day < 1 || day > 31) 
            throw new Exception("日期格式错误"); 
         
        String str = yyyy + con + mm + con + dd; 
        return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR); 
    } 
     
    /**
     * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
     * @param date
     * @return
     */ 
    public static String getYYYYMMDDDate(Date date) 
    { 
        if (date == null) 
            return null; 
        String yyyy = getYear(date) + ""; 
        String mm = getMonth(date) + ""; 
        String dd = getDay(date) + ""; 
         
        mm = StringUtil.rightAlign(mm, 2, "0"); 
        dd = StringUtil.rightAlign(dd, 2, "0"); 
        return yyyy + mm + dd; 
    } 
     
    /**
     * 将YYYY-MM-DD日期转换成YYYYMMDDHHMMSS格式字符串
     * @param date
     * @return
     */ 
    public static String getYYYYMMDDHHMMSSDate(Date date) 
    { 
        if (date == null) 
            return null; 
        String yyyy = getYear(date) + ""; 
        String mm = getMonth(date) + ""; 
        String dd = getDay(date) + ""; 
        String hh = getHour(date) + ""; 
        String min = getMin(date) + ""; 
        String ss = getSecond(date) + ""; 
         
        mm = StringUtil.rightAlign(mm, 2, "0"); 
        dd = StringUtil.rightAlign(dd, 2, "0"); 
        hh = StringUtil.rightAlign(hh, 2, "0"); 
        min = StringUtil.rightAlign(min, 2, "0"); 
        ss = StringUtil.rightAlign(ss, 2, "0"); 
         
        return yyyy + mm + dd + hh + min + ss; 
    } 
     
    /**
     * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
     * @param date
     * @return
     */ 
    public static String getYYYYMMDDDate(String date) 
    { 
        return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR)); 
    } 
     
    /**
     * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
     * @param date
     * @return
     */ 
    public static String dateToDateString(Date date) 
    { 
        return dateToDateString(date, DATATIMEF_STR); 
    } 
     
    /**
     * 将Date转换成formatStr格式的字符串
     * @param date
     * @param formatStr
     * @return
     */ 
    public static String dateToDateString(Date date, String formatStr) 
    { 
        DateFormat df = getDateFormat(formatStr); 
        return df.format(date); 
    } 
     
    /**
     * 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss
     * @param dateTime
     * @return
     */ 
    public static String getTimeString(String dateTime) 
    { 
        return getTimeString(dateTime, DATATIMEF_STR); 
    } 
     
    /**
     * 返回一个formatStr格式的日期时间字符串中的HH:mm:ss
     * @param dateTime
     * @param formatStr
     * @return
     */ 
    public static String getTimeString(String dateTime, String formatStr) 
    { 
        Date d = getDate(dateTime, formatStr); 
        String s = dateToDateString(d); 
        return s.substring(DATATIMEF_STR.indexOf('H')); 
    } 
     
    /**
     * 获取当前日期yyyy-MM-dd的形式
     * @return
     */ 
    public static String getCurDate() 
    { 
        //return dateToDateString(new Date(),DATAFORMAT_STR); 
        return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR); 
    } 
     
    /**
     * 获取当前日期yyyy年MM月dd日的形式
     * @return
     */ 
    public static String getCurZhCNDate() 
    { 
        return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR); 
    } 
     
    /**
     * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
     * @return
     */ 
    public static String getCurDateTime() 
    { 
        return dateToDateString(new Date(), DATATIMEF_STR); 
    } 
     
    /**
     * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
     * @return
     */ 
    public static String getCurZhCNDateTime() 
    { 
        return dateToDateString(new Date(), ZHCN_DATATIMEF_STR); 
    } 
     
    /**
     * 获取日期d的days天后的一个Date
     * @param d
     * @param days
     * @return
     */ 
    public static Date getInternalDateByDay(Date d, int days) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.DATE, days); 
        return now.getTime(); 
    } 
     
    public static Date getInternalDateByMon(Date d, int months) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.MONTH, months); 
        return now.getTime(); 
    } 
     
    public static Date getInternalDateByYear(Date d, int years) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.YEAR, years); 
        return now.getTime(); 
    } 
     
    public static Date getInternalDateBySec(Date d, int sec) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.SECOND, sec); 
        return now.getTime(); 
    } 
     
    public static Date getInternalDateByMin(Date d, int min) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.MINUTE, min); 
        return now.getTime(); 
    } 
     
    public static Date getInternalDateByHour(Date d, int hours) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        now.add(Calendar.HOUR_OF_DAY, hours); 
        return now.getTime(); 
    } 
     
    /**
     * 根据一个日期字符串,返回日期格式,目前支持4种
     * 如果都不是,则返回null
     * @param DateString
     * @return
     */ 
    public static String getFormateStr(String DateString) 
    { 
        String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd" 
        String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss"; 
        String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日" 
        String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH时mm分ss秒" 
         
        Pattern p = Pattern.compile(patternStr1); 
        Matcher m = p.matcher(DateString); 
        boolean b = m.matches(); 
        if (b) 
            return DATAFORMAT_STR; 
        p = Pattern.compile(patternStr2); 
        m = p.matcher(DateString); 
        b = m.matches(); 
        if (b) 
            return DATATIMEF_STR; 
         
        p = Pattern.compile(patternStr3); 
        m = p.matcher(DateString); 
        b = m.matches(); 
        if (b) 
            return ZHCN_DATAFORMAT_STR; 
         
        p = Pattern.compile(patternStr4); 
        m = p.matcher(DateString); 
        b = m.matches(); 
        if (b) 
            return ZHCN_DATATIMEF_STR; 
        return null; 
    } 
     
    /**
     * 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串
     * @param dateStr
     * @return
     */ 
    public static String getZhCNDateTime(String dateStr) 
    { 
        Date d = getDate(dateStr); 
        return dateToDateString(d, ZHCN_DATATIMEF_STR); 
    } 
     
    /**
     * 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串
     * @param dateStr
     * @return
     */ 
    public static String getZhCNDate(String dateStr) 
    { 
        Date d = getDate(dateStr, DATAFORMAT_STR); 
        return dateToDateString(d, ZHCN_DATAFORMAT_STR); 
    } 
     
    /**
     * 将dateStr从fmtFrom转换到fmtTo的格式
     * @param dateStr
     * @param fmtFrom
     * @param fmtTo
     * @return
     */ 
    public static String getDateStr(String dateStr, String fmtFrom, String fmtTo) 
    { 
        Date d = getDate(dateStr, fmtFrom); 
        return dateToDateString(d, fmtTo); 
    } 
     
    /**
     * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
     * @param time1
     * @param time2
     * @return
     */ 
    public static long compareDateStr(String time1, String time2) 
    { 
        Date d1 = getDate(time1); 
        Date d2 = getDate(time2); 
        return d2.getTime() - d1.getTime(); 
    } 
     
    /**
     * 将小时数换算成返回以毫秒为单位的时间
     * @param hours
     * @return
     */ 
    public static long getMicroSec(BigDecimal hours) 
    { 
        BigDecimal bd; 
        bd = hours.multiply(new BigDecimal(3600 * 1000)); 
        return bd.longValue(); 
    } 
     
    /**
     * 获取Date中的分钟
     * @param d
     * @return
     */ 
    public static int getMin(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.MINUTE); 
    } 
     
    /**
     * 获取Date中的小时(24小时)
     * @param d
     * @return
     */ 
    public static int getHour(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.HOUR_OF_DAY); 
    } 
     
    /**
     * 获取Date中的秒
     * @param d
     * @return
     */ 
    public static int getSecond(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.SECOND); 
    } 
     
    /**
     * 获取xxxx-xx-xx的日
     * @param d
     * @return
     */ 
    public static int getDay(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.DAY_OF_MONTH); 
    } 
     
    /**
     * 获取月份,1-12月
     * @param d
     * @return
     */ 
    public static int getMonth(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.MONTH) + 1; 
    } 
     
    /**
     * 获取19xx,20xx形式的年
     * @param d
     * @return
     */ 
    public static int getYear(Date d) 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        now.setTime(d); 
        return now.get(Calendar.YEAR); 
    } 
     
    /**
     * 得到d的上个月的年份+月份,如200505
     * @return
     */ 
    public static String getYearMonthOfLastMon(Date d) 
    { 
        Date newdate = getInternalDateByMon(d, -1); 
        String year = String.valueOf(getYear(newdate)); 
        String month = String.valueOf(getMonth(newdate)); 
        return year + month; 
    } 
     
    /**
     * 得到当前日期的年和月如200509
     * @return String
     */ 
    public static String getCurYearMonth() 
    { 
        Calendar now = Calendar.getInstance(TimeZone.getDefault()); 
        String DATE_FORMAT = "yyyyMM"; 
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT); 
        sdf.setTimeZone(TimeZone.getDefault()); 
        return (sdf.format(now.getTime())); 
    } 
     
    public static Date getNextMonth(String year, String month) 
    { 
        String datestr = year + "-" + month + "-01"; 
        Date date = getDate(datestr, DATAFORMAT_STR); 
        return getInternalDateByMon(date, 1); 
    } 
     
    public static Date getLastMonth(String year, String month) 
    { 
        String datestr = year + "-" + month + "-01"; 
        Date date = getDate(datestr, DATAFORMAT_STR); 
        return getInternalDateByMon(date, -1); 
    } 
     
    /**
     * 得到日期d,按照页面日期控件格式,如"2001-3-16"
     * @param d
     * @return
     */ 
    public static String getSingleNumDate(Date d) 
    { 
        return dateToDateString(d, DATAFORMAT_STR); 
    } 
     
    /**
     * 得到d半年前的日期,"yyyy-MM-dd"
     * @param d
     * @return
     */ 
    public static String getHalfYearBeforeStr(Date d) 
    { 
        return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR); 
    } 
     
    /**
     * 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后
     * @param d
     * @param days
     * @return
     */ 
    public static String getInternalDateByLastDay(Date d, int days) 
    { 
         
        return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR); 
    } 
     
    /**
     * 日期中的年月日相加
     *  @param field int  需要加的字段  年 月 日
     * @param amount int 加多少
     * @return String
     */ 
    public static String addDate(int field, int amount) 
    { 
        int temp = 0; 
        if (field == 1) 
        { 
            temp = Calendar.YEAR; 
        } 
        if (field == 2) 
        { 
            temp = Calendar.MONTH; 
        } 
        if (field == 3) 
        { 
            temp = Calendar.DATE; 
        } 
         
        String Time = ""; 
        try 
        { 
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
            Calendar cal = Calendar.getInstance(TimeZone.getDefault()); 
            cal.add(temp, amount); 
            Time = sdf.format(cal.getTime()); 
            return Time; 
        } 
        catch (Exception e) 
        { 
            e.printStackTrace(); 
            return null; 
        } 
         
    } 
     
    /**
     * 获得系统当前月份的天数
     * @return
     */ 
    public static int getCurentMonthDay() 
    { 
        Date date = Calendar.getInstance().getTime(); 
        return getMonthDay(date); 
    } 
     
    /**
     * 获得指定日期月份的天数
     * @return
     */ 
    public static int getMonthDay(Date date) 
    { 
        Calendar c = Calendar.getInstance(); 
        c.setTime(date); 
        return c.getActualMaximum(Calendar.DAY_OF_MONTH); 
         
    } 
     
    /**
     * 获得指定日期月份的天数  yyyy-mm-dd
     * @return
     */ 
    public static int getMonthDay(String date) 
    { 
        Date strDate = getDate(date, DATAFORMAT_STR); 
        return getMonthDay(strDate); 
         
    } 
     
    public static String getStringDate(Calendar cal) 
    { 
         
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
        return format.format(cal.getTime()); 
    } 
     
    /**
     * @param args
     */ 
    public static void main(String[] args) 
    { 
        //      //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss")); 
        //      System.out.print("\n"+DateUtil.getCurZhCNDateTime()); 
        //      System.out.print("\n"+getFormateStr(DateUtil.getCurDate())); 
        //      System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3")); 
        //      System.out.print("\n"+getDay(new Date())); 
        //      System.out.print("\n"+getMonth(new Date())); 
        //      System.out.print("\n"+getYear(new Date())); 
        //      System.out.print("\n"+getMin(new Date())); 
        ////        System.out.print("\n"+new Date().getSeconds()); 
        /*Date d1 = new Date(2007,11,30);
        Date d2 = new Date(2007,12,1);
        if(d2.compareTo(d1)>0){
            System.out.println("d2大于d1");
        }else{
            System.out.println("d2小于d1");
        }*/ 
 
        System.out.println(addDate(1, 1)); 
        System.out.println(addDate(2, 1)); 
        System.out.println(addDate(3, 1)); 
         
        System.out.println(getYYYYMMDDHHMMSSDate(new Date())); 
         
        System.out.println(getCurentMonthDay()); 
         
    } 
     
  相关解决方案