<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    于吉吉的技術(shù)博客

    建造高性能門戶網(wǎng)

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評(píng)論 :: 0 Trackbacks
    下面一個(gè)伴隨了好幾個(gè)工程的時(shí)間操作的工具類,提供了一些常用的時(shí)間操作和計(jì)算的方法,每段時(shí)間都會(huì)進(jìn)行一次整理,希望能去冗余和得到好的擴(kuò)展

    package com.***.product.util;

    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.regex.Pattern;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;


    public class DateUtil {
        
    protected static Log logger = LogFactory.getLog(DateUtil.class);

        
    // 格式:年-月-日 小時(shí):分鐘:秒
        public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";

        
    // 格式:年-月-日 小時(shí):分鐘
        public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";

        
    // 格式:年月日 小時(shí)分鐘秒
        public static final String FORMAT_THREE = "yyyyMMdd-HHmmss";

        
    // 格式:年-月-日
        public static final String LONG_DATE_FORMAT = "yyyy-MM-dd";

        
    // 格式:月-日
        public static final String SHORT_DATE_FORMAT = "MM-dd";

        
    // 格式:小時(shí):分鐘:秒
        public static final String LONG_TIME_FORMAT = "HH:mm:ss";

        
    //格式:年-月
        public static final String MONTG_DATE_FORMAT = "yyyy-MM";

        
    // 年的加減
        public static final int SUB_YEAR = Calendar.YEAR;

        
    // 月加減
        public static final int SUB_MONTH = Calendar.MONTH;

        
    // 天的加減
        public static final int SUB_DAY = Calendar.DATE;

        
    // 小時(shí)的加減
        public static final int SUB_HOUR = Calendar.HOUR;

        
    // 分鐘的加減
        public static final int SUB_MINUTE = Calendar.MINUTE;

        
    // 秒的加減
        public static final int SUB_SECOND = Calendar.SECOND;

        
    static final String dayNames[] = { "星期日""星期一""星期二""星期三""星期四",
                
    "星期五""星期六" };

        @SuppressWarnings(
    "unused")
        
    private static final SimpleDateFormat timeFormat = new SimpleDateFormat(
                
    "yyyy-MM-dd HH:mm:ss");

        
    public DateUtil() {
        }

        
    /**
         * 把符合日期格式的字符串轉(zhuǎn)換為日期類型
         * 
         * 
    @param dateStr
         * 
    @return
         
    */
        
    public static java.util.Date stringtoDate(String dateStr, String format) {
            Date d 
    = null;
            SimpleDateFormat formater 
    = new SimpleDateFormat(format);
            
    try {
                formater.setLenient(
    false);
                d 
    = formater.parse(dateStr);
            } 
    catch (Exception e) {
                
    // log.error(e);
                d = null;
            }
            
    return d;
        }

        
    /**
         * 把符合日期格式的字符串轉(zhuǎn)換為日期類型
         
    */
        
    public static java.util.Date stringtoDate(String dateStr, String format,
                ParsePosition pos) {
            Date d 
    = null;
            SimpleDateFormat formater 
    = new SimpleDateFormat(format);
            
    try {
                formater.setLenient(
    false);
                d 
    = formater.parse(dateStr, pos);
            } 
    catch (Exception e) {
                d 
    = null;
            }
            
    return d;
        }

        
    /**
         * 把日期轉(zhuǎn)換為字符串
         * 
         * 
    @param date
         * 
    @return
         
    */
        
    public static String dateToString(java.util.Date date, String format) {
            String result 
    = "";
            SimpleDateFormat formater 
    = new SimpleDateFormat(format);
            
    try {
                result 
    = formater.format(date);
            } 
    catch (Exception e) {
                
    // log.error(e);
            }
            
    return result;
        }

        
    /**
         * 獲取當(dāng)前時(shí)間的指定格式
         * 
         * 
    @param format
         * 
    @return
         
    */
        
    public static String getCurrDate(String format) {
            
    return dateToString(new Date(), format);
        }

        
    /**
         * 
         * 
    @param dateStr
         * 
    @param amount
         * 
    @return
         
    */
        
    public static String dateSub(int dateKind, String dateStr, int amount) {
            Date date 
    = stringtoDate(dateStr, FORMAT_ONE);
            Calendar calendar 
    = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(dateKind, amount);
            
    return dateToString(calendar.getTime(), FORMAT_ONE);
        }

        
    /**
         * 兩個(gè)日期相減
         * 
         * 
    @param firstTime
         * 
    @param secTime
         * 
    @return 相減得到的秒數(shù)
         
    */
        
    public static long timeSub(String firstTime, String secTime) {
            
    long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
            
    long second = stringtoDate(secTime, FORMAT_ONE).getTime();
            
    return (second - first) / 1000;
        }

        
    /**
         * 獲得某月的天數(shù)
         * 
         * 
    @param year
         *          int
         * 
    @param month
         *          int
         * 
    @return int
         
    */
        
    public static int getDaysOfMonth(String year, String month) {
            
    int days = 0;
            
    if (month.equals("1"|| month.equals("3"|| month.equals("5")
                    
    || month.equals("7"|| month.equals("8"|| month.equals("10")
                    
    || month.equals("12")) {
                days 
    = 31;
            } 
    else if (month.equals("4"|| month.equals("6"|| month.equals("9")
                    
    || month.equals("11")) {
                days 
    = 30;
            } 
    else {
                
    if ((Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0)
                        
    || Integer.parseInt(year) % 400 == 0) {
                    days 
    = 29;
                } 
    else {
                    days 
    = 28;
                }
            }

            
    return days;
        }

        
    /**
         * 獲取某年某月的天數(shù)
         * 
         * 
    @param year
         *          int
         * 
    @param month
         *          int 月份[1-12]
         * 
    @return int
         
    */
        
    public static int getDaysOfMonth(int year, int month) {
            Calendar calendar 
    = Calendar.getInstance();
            calendar.set(year, month 
    - 11);
            
    return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        }

        
    /**
         * 獲得當(dāng)前日期
         * 
         * 
    @return int
         
    */
        
    public static int getToday() {
            Calendar calendar 
    = Calendar.getInstance();
            
    return calendar.get(Calendar.DATE);
        }

        
    /**
         * 獲得當(dāng)前月份
         * 
         * 
    @return int
         
    */
        
    public static int getToMonth() {
            Calendar calendar 
    = Calendar.getInstance();
            
    return calendar.get(Calendar.MONTH) + 1;
        }

        
    /**
         * 獲得當(dāng)前年份
         * 
         * 
    @return int
         
    */
        
    public static int getToYear() {
            Calendar calendar 
    = Calendar.getInstance();
            
    return calendar.get(Calendar.YEAR);
        }

        
    /**
         * 返回日期的天
         * 
         * 
    @param date
         *          Date
         * 
    @return int
         
    */
        
    public static int getDay(Date date) {
            Calendar calendar 
    = Calendar.getInstance();
            calendar.setTime(date);
            
    return calendar.get(Calendar.DATE);
        }

        
    /**
         * 返回日期的年
         * 
         * 
    @param date
         *          Date
         * 
    @return int
         
    */
        
    public static int getYear(Date date) {
            Calendar calendar 
    = Calendar.getInstance();
            calendar.setTime(date);
            
    return calendar.get(Calendar.YEAR);
        }

        
    /**
         * 返回日期的月份,1-12
         * 
         * 
    @param date
         *          Date
         * 
    @return int
         
    */
        
    public static int getMonth(Date date) {
            Calendar calendar 
    = Calendar.getInstance();
            calendar.setTime(date);
            
    return calendar.get(Calendar.MONTH) + 1;
        }

        
    /**
         * 計(jì)算兩個(gè)日期相差的天數(shù),如果date2 > date1 返回正數(shù),否則返回負(fù)數(shù)
         * 
         * 
    @param date1
         *          Date
         * 
    @param date2
         *          Date
         * 
    @return long
         
    */
        
    public static long dayDiff(Date date1, Date date2) {
            
    return (date2.getTime() - date1.getTime()) / 86400000;
        }

        
    /**
         * 比較兩個(gè)日期的年差
         * 
         * 
    @param befor
         * 
    @param after
         * 
    @return
         
    */
        
    public static int yearDiff(String before, String after) {
            Date beforeDay 
    = stringtoDate(before, LONG_DATE_FORMAT);
            Date afterDay 
    = stringtoDate(after, LONG_DATE_FORMAT);
            
    return getYear(afterDay) - getYear(beforeDay);
        }

        
    /**
         * 比較指定日期與當(dāng)前日期的差
         * 
         * 
    @param befor
         * 
    @param after
         * 
    @return
         
    */
        
    public static int yearDiffCurr(String after) {
            Date beforeDay 
    = new Date();
            Date afterDay 
    = stringtoDate(after, LONG_DATE_FORMAT);
            
    return getYear(beforeDay) - getYear(afterDay);
        }
        
        
    /**
         * 比較指定日期與當(dāng)前日期的差
         * 
    @param before
         * 
    @return
         * 
    @author chenyz
         
    */
        
    public static long dayDiffCurr(String before) {
            Date currDate 
    = DateUtil.stringtoDate(currDay(), LONG_DATE_FORMAT);
            Date beforeDate 
    = stringtoDate(before, LONG_DATE_FORMAT);
            
    return (currDate.getTime() - beforeDate.getTime()) / 86400000;

        }

        
    /**
         * 獲取每月的第一周
         * 
    @param year
         * 
    @param month
         * 
    @return
         * 
    @author chenyz
         
    */
        
    public static int getFirstWeekdayOfMonth(int year, int month) {
            Calendar c 
    = Calendar.getInstance();
            c.setFirstDayOfWeek(Calendar.SATURDAY); 
    // 星期天為第一天
            c.set(year, month - 11);
            
    return c.get(Calendar.DAY_OF_WEEK);
        }

        
    /**
         * 獲取每月的最后一周
         * 
    @param year
         * 
    @param month
         * 
    @return
         * 
    @author chenyz
         
    */
        
    public static int getLastWeekdayOfMonth(int year, int month) {
            Calendar c 
    = Calendar.getInstance();
            c.setFirstDayOfWeek(Calendar.SATURDAY); 
    // 星期天為第一天
            c.set(year, month - 1, getDaysOfMonth(year, month));
            
    return c.get(Calendar.DAY_OF_WEEK);
        }

        
    /**
         * 獲得當(dāng)前日期字符串,格式"yyyy_MM_dd_HH_mm_ss"
         * 
         * 
    @return
         
    */
        
    public static String getCurrent() {
            Calendar cal 
    = Calendar.getInstance();
            cal.setTime(
    new Date());
            
    int year = cal.get(Calendar.YEAR);
            
    int month = cal.get(Calendar.MONTH) + 1;
            
    int day = cal.get(Calendar.DAY_OF_MONTH);
            
    int hour = cal.get(Calendar.HOUR_OF_DAY);
            
    int minute = cal.get(Calendar.MINUTE);
            
    int second = cal.get(Calendar.SECOND);
            StringBuffer sb 
    = new StringBuffer();
            sb.append(year).append(
    "_").append(StringUtil.addzero(month, 2))
                    .append(
    "_").append(StringUtil.addzero(day, 2)).append("_")
                    .append(StringUtil.addzero(hour, 
    2)).append("_").append(
                            StringUtil.addzero(minute, 
    2)).append("_").append(
                            StringUtil.addzero(second, 
    2));
            
    return sb.toString();
        }

        
    /**
         * 獲得當(dāng)前日期字符串,格式"yyyy-MM-dd HH:mm:ss"
         * 
         * 
    @return
         
    */
        
    public static String getNow() {
            Calendar today 
    = Calendar.getInstance();
            
    return dateToString(today.getTime(), FORMAT_ONE);
        }

        
    /**
         * 根據(jù)生日獲取星座
         * 
         * 
    @param birth
         *          YYYY-mm-dd
         * 
    @return
         
    */
        
    public static String getAstro(String birth) {
            
    if (!isDate(birth)) {
                birth 
    = "2000" + birth;
            }
            
    if (!isDate(birth)) {
                
    return "";
            }
            
    int month = Integer.parseInt(birth.substring(birth.indexOf("-"+ 1,
                    birth.lastIndexOf(
    "-")));
            
    int day = Integer.parseInt(birth.substring(birth.lastIndexOf("-"+ 1));
            String s 
    = "魔羯水瓶雙魚牡羊金牛雙子巨蟹獅子處女天秤天蝎射手魔羯";
            
    int[] arr = { 201921212122232323232222 };
            
    int start = month * 2 - (day < arr[month - 1? 2 : 0);
            
    return s.substring(start, start + 2+ "";
        }

        
    /**
         * 判斷日期是否有效,包括閏年的情況
         * 
         * 
    @param date
         *          YYYY-mm-dd
         * 
    @return
         
    */
        
    public static boolean isDate(String date) {
            StringBuffer reg 
    = new StringBuffer(
                    
    "^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");
            reg.append(
    "[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");
            reg.append(
    "|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");
            reg.append(
    "(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");
            reg.append(
    "35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");
            reg.append(
    "-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
            reg.append(
    "-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");
            reg.append(
    "1-9])|(1[0-9])|(2[0-8]))))))");
            Pattern p 
    = Pattern.compile(reg.toString());
            
    return p.matcher(date).matches();
        }

        
    /**
         * 取得指定日期過 months 月后的日期 (當(dāng) months 為負(fù)數(shù)表示指定月之前);
         * 
         * 
    @param date
         *          日期 為null時(shí)表示當(dāng)天
         * 
    @param month
         *          相加(相減)的月數(shù)
         
    */
        
    public static Date nextMonth(Date date, int months) {
            Calendar cal 
    = Calendar.getInstance();
            
    if (date != null) {
                cal.setTime(date);
            }
            cal.add(Calendar.MONTH, months);
            
    return cal.getTime();
        }

        
    /**
         * 取得指定日期過 day 天后的日期 (當(dāng) day 為負(fù)數(shù)表示指日期之前);
         * 
         * 
    @param date
         *          日期 為null時(shí)表示當(dāng)天
         * 
    @param month
         *          相加(相減)的月數(shù)
         
    */
        
    public static Date nextDay(Date date, int day) {
            Calendar cal 
    = Calendar.getInstance();
            
    if (date != null) {
                cal.setTime(date);
            }
            cal.add(Calendar.DAY_OF_YEAR, day);
            
    return cal.getTime();
        }

        
    /**
         * 取得距離今天 day 日的日期
         * 
    @param day
         * 
    @param format
         * 
    @return
         * 
    @author chenyz
         
    */
        
    public static String nextDay(int day, String format) {
            Calendar cal 
    = Calendar.getInstance();
            cal.setTime(
    new Date());
            cal.add(Calendar.DAY_OF_YEAR, day);
            
    return dateToString(cal.getTime(), format);
        }

        
    /**
         * 取得指定日期過 day 周后的日期 (當(dāng) day 為負(fù)數(shù)表示指定月之前)
         * 
         * 
    @param date
         *          日期 為null時(shí)表示當(dāng)天
         
    */
        
    public static Date nextWeek(Date date, int week) {
            Calendar cal 
    = Calendar.getInstance();
            
    if (date != null) {
                cal.setTime(date);
            }
            cal.add(Calendar.WEEK_OF_MONTH, week);
            
    return cal.getTime();
        }

        
    /**
         * 獲取當(dāng)前的日期(yyyy-MM-dd)
         
    */
        
    public static String currDay() {
            
    return DateUtil.dateToString(new Date(), DateUtil.LONG_DATE_FORMAT);
        }

        
    /**
         * 獲取昨天的日期
         * 
         * 
    @return
         
    */
        
    public static String befoDay() {
            
    return befoDay(DateUtil.LONG_DATE_FORMAT);
        }

        
    /**
         * 根據(jù)時(shí)間類型獲取昨天的日期
         * 
    @param format
         * 
    @return
         * 
    @author chenyz
         
    */
        
    public static String befoDay(String format) {
            
    return DateUtil.dateToString(DateUtil.nextDay(new Date(), -1), format);
        }

        
    /**
         * 獲取明天的日期
         
    */
        
    public static String afterDay() {
            
    return DateUtil.dateToString(DateUtil.nextDay(new Date(), 1),
                    DateUtil.LONG_DATE_FORMAT);
        }

        
    /**
         * 取得當(dāng)前時(shí)間距離1900/1/1的天數(shù)
         * 
         * 
    @return
         
    */
        
    public static int getDayNum() {
            
    int daynum = 0;
            GregorianCalendar gd 
    = new GregorianCalendar();
            Date dt 
    = gd.getTime();
            GregorianCalendar gd1 
    = new GregorianCalendar(190011);
            Date dt1 
    = gd1.getTime();
            daynum 
    = (int) ((dt.getTime() - dt1.getTime()) / (24 * 60 * 60 * 1000));
            
    return daynum;
        }

        
    /**
         * getDayNum的逆方法(用于處理Excel取出的日期格式數(shù)據(jù)等)
         * 
         * 
    @param day
         * 
    @return
         
    */
        
    public static Date getDateByNum(int day) {
            GregorianCalendar gd 
    = new GregorianCalendar(190011);
            Date date 
    = gd.getTime();
            date 
    = nextDay(date, day);
            
    return date;
        }

        
    /** 針對(duì)yyyy-MM-dd HH:mm:ss格式,顯示yyyymmdd */
        
    public static String getYmdDateCN(String datestr) {
            
    if (datestr == null)
                
    return "";
            
    if (datestr.length() < 10)
                
    return "";
            StringBuffer buf 
    = new StringBuffer();
            buf.append(datestr.substring(
    04)).append(datestr.substring(57))
                    .append(datestr.substring(
    810));
            
    return buf.toString();
        }

        
    /**
         * 獲取本月第一天
         * 
         * 
    @param format
         * 
    @return
         
    */
        
    public static String getFirstDayOfMonth(String format) {
            Calendar cal 
    = Calendar.getInstance();
            cal.set(Calendar.DATE, 
    1);
            
    return dateToString(cal.getTime(), format);
        }

        
    /**
         * 獲取本月最后一天
         * 
         * 
    @param format
         * 
    @return
         
    */
        
    public static String getLastDayOfMonth(String format) {
            Calendar cal 
    = Calendar.getInstance();
            cal.set(Calendar.DATE, 
    1);
            cal.add(Calendar.MONTH, 
    1);
            cal.add(Calendar.DATE, 
    -1);
            
    return dateToString(cal.getTime(), format);
        }
    }


    posted on 2010-12-09 18:37 陳于喆 閱讀(464) 評(píng)論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: gogo免费在线观看| 日韩电影免费在线观看网站| 中文在线免费不卡视频| 久久精品毛片免费观看| 国产精品冒白浆免费视频| 国产成人亚洲精品青草天美| 亚洲一级毛片视频| 一个人看的在线免费视频| 91黑丝国产线观看免费| 亚洲国产综合精品一区在线播放| 亚洲美女大bbbbbbbbb| 美女无遮挡免费视频网站| 99久久久国产精品免费牛牛| 国产嫩草影院精品免费网址| 亚洲视频一区调教| 亚洲av无码成人精品区在线播放| 亚洲高清在线播放| 日本免费精品一区二区三区| 67194熟妇在线永久免费观看| 亚洲熟女乱综合一区二区| 亚洲人成激情在线播放| 久久久WWW成人免费精品| 夭天干天天做天天免费看| 亚洲国产精品无码久久SM | 久久九九亚洲精品| 亚洲AV无码XXX麻豆艾秋| 免费人成视频在线观看网站| 亚洲第一页日韩专区| 国产日本亚洲一区二区三区| 精品国产麻豆免费人成网站| 亚洲&#228;v永久无码精品天堂久久 | jzzijzzij在线观看亚洲熟妇| 无码国产精品一区二区免费3p| 免费一看一级毛片人| 亚洲五月丁香综合视频| 久久精品无码精品免费专区| 亚洲国产V高清在线观看| 亚洲久悠悠色悠在线播放| 一级毛片免费观看不卡视频| 久久精品国产精品亚洲| 亚洲αⅴ无码乱码在线观看性色|