欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

J2EE常用工具类—时间处理工具类

程序员文章站 2022-05-24 17:42:51
...
package cn.org.jshuwei.j2ee.util;

import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
* 
* 日期操作的工具类
* 
* @author huwei(jshuwei.org.cn)
* @since 1.0
* 
*/
public class DateUtil {

    private static String defDtPtn = "yyyy-MM-dd HH:mm:ss";// 缺省日期格式

    /**
     * 计算给定时间至今的天数
     * 
     * @since 1.1
     * @param date
     *            给定的时间
     * @return 给定时间至今的天数
     */
    public static long date2day(String date) {
        long day = 0;
        DateFormat df = DateFormat.getDateInstance();
        try {
            long old = df.parse(date).getTime();
            long now = new java.util.Date().getTime();
            long secs = now - old;
            day = secs / (1000 * 24 * 60 * 60);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return day;
    }

    /**
     * 格式化给定时间后day天的时间
     * 
     * @since 1.0
     * @param date
     *            需要格式化的时间
     * @param day
     *            增加的天数
     * @return 给定时间的后day天的格式化字符串(如:2008-11-22)
     */
    public static String formatDate(java.util.Date date, Integer day) {
        String str = "";
        str = new Date(date.getTime() + day * 24 * 60 * 60).toString();
        return str;
    }

    /**
     * 格式化给定时间
     * 
     * @param date
     *            需要格式化的时间
     * @return 给定时间的格式化字符串(如:2008-11-22)
     */
    public static String formatDate(java.util.Date date) {
        return new Date(date.getTime()).toString();
    }

    /**
     * 得到当前年
     * 
     * @since 1.0
     * @return 返回当前年(YYYY)
     */
    public static int getYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 得到当前月
     * 
     * @since 1.0
     * @return 返回当前月(1~12)
     */
    public static int getMonth() {
        return Calendar.getInstance().get(Calendar.MONTH) + 1;
    }

    /**
     * 得到当前日
     * 
     * @since 1.0
     * @return 返回当前日(1~31)
     */
    public static int getDay() {
        return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 得到当前年
     * 
     * @since 1.0
     * @return 返回当前年(YY)
     */
    public static String getYear2() {
        int year = getYear();
        return StringUtil.Integer2String(year, "1986").substring(2, 4);
    }

    /**
     * 得到当前月
     * 
     * @since 1.0
     * @return 返回当前月(01~12)
     */
    public static String getMonth2() {
        int month = getMonth();
        if (month < 10) {
            return "0" + StringUtil.Integer2String(month, "00");
        }
        return StringUtil.Integer2String(month, "00");
    }

    /**
     * 得到当前日
     * 
     * @since 1.0
     * @return 返回当前日(01~31)
     */
    public static String getDay2() {
        int day = getDay();
        if (day < 10) {
            return "0" + StringUtil.Integer2String(day, "00");
        }
        return StringUtil.Integer2String(day, "00");
    }

    /**
     * 得到指定格式的当前时间
     * 
     * @param format
     *            格式化形式(年用YY/YYYY表示;月用M/MM表示;日用D/DD表示,之间任意任序组合),<br />
     *            如"YYYY-MM-DD"返回形如:1986-12-17<br />
     *            如"YY-MM"返回形如:86-12<br />
     *            如"YY年MM月"返回形如:86年12月……
     * @since 1.0
     * @return 返回指定格式的当前时间
     * 
     */
    public static String getDate(String format) {
        format = format.replace("YYYY", getYear() + "");
        format = format.replace("YY", getYear2());
        format = format.replace("MM", getMonth2());
        format = format.replace("M", getMonth() + "");
        format = format.replace("DD", getDay2());
        format = format.replace("D", getDay() + "");
        return format;
    }

    /**
     * 将字符串按指定格式解析成日期对象
     * 
     * @since 1.1
     * @param dateStr
     *            需要进行转换的日期字符串
     * @param pattern
     *            日期字符串的格式
     * @return "yyyy-MM-dd HH:mm:ss"形式的日期对象
     */
    public static java.util.Date parseDate(String dateStr, String pattern) {
        SimpleDateFormat DATEFORMAT = new SimpleDateFormat(defDtPtn);
        DATEFORMAT.applyPattern(pattern);
        java.util.Date ret = null;
        try {
            ret = DATEFORMAT.parse(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        DATEFORMAT.applyPattern(defDtPtn);
        return ret;
    }

    /**
     * 计算详细年龄
     * 
     * @since 1.1
     * @param birthdayStr
     *            出生日期 格式"YYYY-MM-DD"
     * @return 指定日期至今天的年龄
     */
    public static String countAge(String birthdayStr) {
        String age = "";
        if (birthdayStr != null && birthdayStr.length() == 8) {
            java.util.Date birthday = parseDate(birthdayStr, "YYYY-MM-DD");

            if (birthday != null) {
                Calendar calendar = Calendar.getInstance();
                int year1 = getYear();
                int month1 = StringUtil.String2Integer(getMonth2(), 0);
                int day1 = StringUtil.String2Integer(getDay2(), 00);

                calendar.setTime(birthday);
                int year2 = calendar.get(Calendar.YEAR);
                int month2 = calendar.get(Calendar.MONTH) + 1;
                int day2 = calendar.get(Calendar.DATE);

                int year = year1 - year2;
                int month = month1 - month2;
                int day = day1 - day2;

                if (month < 0) {
                    year = year - 1;
                    month = 12 + month1 - month2;
                }

                if (day < 0) {
                    month = month - 1;
                    if (month < 0) {
                        year = year - 1;
                        month = 11;
                    }
                    int lastMonthDay = 0;
                    if (month1 == 0) {
                        lastMonthDay = getDayOfMonth(12, year1 - 1);
                    } else {
                        lastMonthDay = getDayOfMonth(month1, year1);
                    }
                    day = lastMonthDay + day1 - day2;
                }

                if (year > 5) {
                    age = year + "岁";
                } else if (year > 0) {
                    if (month == 0) {
                        age = year + "岁";
                    } else {
                        age = year + "岁" + month + "月";
                    }
                } else {
                    if (month > 5) {
                        age = month + "月";
                    } else if (month > 0) {
                        age = month + "月" + day + "天";
                    } else {
                        age = day + "天";
                    }
                }
            }
        }

        return age;
    }

    /**
     * 得到指定年月的天数
     * 
     * @since 1.1
     * @param month
     *            指定月份
     * @param year
     *            指定的年份
     * @return 天数
     */
    public static int getDayOfMonth(int month, int year) {
        int ret = 0;
        boolean flag = false;

        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            flag = true;
        }

        switch (month) {
        case 1:
            ret = 31;
            break;
        case 2:
            if (flag) {
                ret = 29;
            } else {
                ret = 28;
            }
            break;
        case 3:
            ret = 31;
            break;
        case 4:
            ret = 30;
            break;
        case 5:
            ret = 31;
            break;
        case 6:
            ret = 30;
            break;
        case 7:
            ret = 31;
            break;
        case 8:
            ret = 31;
            break;
        case 9:
            ret = 30;
            break;
        case 10:
            ret = 31;
            break;
        case 11:
            ret = 30;
            break;
        case 12:
            ret = 31;
            break;
        default:
            break;
        }
        return ret;
    }

    /**
     * 计算某天是星期几
     * 
     * @since 1.1
     * @param p_date
     *            日期字符串
     * @return 星期
     */
    public static int whatDayIsSpecifyDate(String p_date) {
        // 2002-2-22 is friday5
        long differenceDays = 0L;
        long m = 0L;
        differenceDays = signDaysBetweenTowDate(p_date, "2002-2-22");

        m = (differenceDays % 7);
        m = m + 5;
        m = m > 7 ? m - 7 : m;
        return Integer.parseInt(m + "");
    }

    /**
     * 计算两日期间相差天数.
     * 
     * @since 1.1
     * @param d1
     *            日期字符串
     * @param d2
     *            日期字符串
     * @return long 天数
     */
    public static long signDaysBetweenTowDate(String d1, String d2) {
        java.sql.Date dd1 = null;
        java.sql.Date dd2 = null;
        long result = -1l;
        try {
            dd1 = java.sql.Date.valueOf(d1);
            dd2 = java.sql.Date.valueOf(d2);
            result = signDaysBetweenTowDate(dd1, dd2);
        } catch (Exception ex) {
            result = -1;
        }
        return result;
    }

    /**
     * 计算两日期间相差天数.
     * 
     * @since 1.1
     * @param d1
     *            开始日期 日期型
     * @param d2
     *            结束日期 日期型
     * @return long 天数
     */
    public static long signDaysBetweenTowDate(java.sql.Date d1, java.sql.Date d2) {
        return (d1.getTime() - d2.getTime()) / (3600 * 24 * 1000);
    }
}

 

相关标签: Java SQL