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

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

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

    于吉吉的技術博客

    建造高性能門戶網

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

    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);

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

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

        
    // 格式:年月日 小時分鐘秒
        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";

        
    // 格式:小時:分鐘:秒
        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;

        
    // 小時的加減
        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() {
        }

        
    /**
         * 把符合日期格式的字符串轉換為日期類型
         * 
         * 
    @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;
        }

        
    /**
         * 把符合日期格式的字符串轉換為日期類型
         
    */
        
    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;
        }

        
    /**
         * 把日期轉換為字符串
         * 
         * 
    @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;
        }

        
    /**
         * 獲取當前時間的指定格式
         * 
         * 
    @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);
        }

        
    /**
         * 兩個日期相減
         * 
         * 
    @param firstTime
         * 
    @param secTime
         * 
    @return 相減得到的秒數
         
    */
        
    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;
        }

        
    /**
         * 獲得某月的天數
         * 
         * 
    @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;
        }

        
    /**
         * 獲取某年某月的天數
         * 
         * 
    @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);
        }

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

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

        
    /**
         * 獲得當前年份
         * 
         * 
    @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;
        }

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

        
    /**
         * 比較兩個日期的年差
         * 
         * 
    @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);
        }

        
    /**
         * 比較指定日期與當前日期的差
         * 
         * 
    @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);
        }
        
        
    /**
         * 比較指定日期與當前日期的差
         * 
    @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);
        }

        
    /**
         * 獲得當前日期字符串,格式"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();
        }

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

        
    /**
         * 根據生日獲取星座
         * 
         * 
    @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 月后的日期 (當 months 為負數表示指定月之前);
         * 
         * 
    @param date
         *          日期 為null時表示當天
         * 
    @param month
         *          相加(相減)的月數
         
    */
        
    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 天后的日期 (當 day 為負數表示指日期之前);
         * 
         * 
    @param date
         *          日期 為null時表示當天
         * 
    @param month
         *          相加(相減)的月數
         
    */
        
    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 周后的日期 (當 day 為負數表示指定月之前)
         * 
         * 
    @param date
         *          日期 為null時表示當天
         
    */
        
    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();
        }

        
    /**
         * 獲取當前的日期(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);
        }

        
    /**
         * 根據時間類型獲取昨天的日期
         * 
    @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);
        }

        
    /**
         * 取得當前時間距離1900/1/1的天數
         * 
         * 
    @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取出的日期格式數據等)
         * 
         * 
    @param day
         * 
    @return
         
    */
        
    public static Date getDateByNum(int day) {
            GregorianCalendar gd 
    = new GregorianCalendar(190011);
            Date date 
    = gd.getTime();
            date 
    = nextDay(date, day);
            
    return date;
        }

        
    /** 針對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 陳于喆 閱讀(456) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 日韩免费毛片视频| 91精品导航在线网址免费| 18禁男女爽爽爽午夜网站免费 | 日韩免费视频一区| 51午夜精品免费视频| 国产色爽免费视频| 久久亚洲精品无码网站| 国产精品免费观看久久| 国产精品亚洲专区在线观看 | 一级A毛片免费观看久久精品| 暖暖免费高清日本一区二区三区| yy一级毛片免费视频| 亚洲区小说区图片区| j8又粗又长又硬又爽免费视频 | 香蕉视频在线观看亚洲| 小草在线看片免费人成视久网| 亚洲AV无码成人网站久久精品大 | 2019中文字幕在线电影免费| 校园亚洲春色另类小说合集| 免费人成年激情视频在线观看| 美女免费视频一区二区| 亚洲国产香蕉人人爽成AV片久久| 日本xxxx色视频在线观看免费| 亚洲国产精品久久久久秋霞影院 | 国产一级理论免费版| 午夜不卡AV免费| 亚洲制服丝袜一区二区三区| 日韩亚洲变态另类中文| 免费国产污网站在线观看15| 免费国产草莓视频在线观看黄| 亚洲情综合五月天| 国产成人精品免费视频大| 亚洲精品国产首次亮相| AV在线亚洲男人的天堂| 99久久久国产精品免费牛牛| 免费国产草莓视频在线观看黄| 亚洲色欲色欱wwW在线| 亚洲最大AV网站在线观看| 午夜dj免费在线观看| 中文在线免费视频| 亚洲av乱码一区二区三区 |