`

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

阅读更多
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常用工具类打包下载

    J2EE常用工具类汇总 ...J2EE常用工具类—时间处理工具类 J2EE常用工具类—文件打包解包处理类 J2EE常用工具类——文件操作类 J2EE常用工具类——邮件处理类(javaMail发送邮件) J2EE常用工具类——字符串工具类

    j2ee常用方法.

    - Spring MVC是实现MVC设计模式的一种工具,其中`Controller`类通过`@RequestMapping`定义处理请求的方法,`Model`代表业务对象,`View`负责渲染视图。 9. JMS(Java Message Service): - 在分布式环境中,JMS...

    j2ee编程参数传递工具类

    HttpUtilsjava j2ee编程参数传递工具类 真实有用 项目中真实使用的

    j2ee常用jar包

    "j2ee常用jar包"这个资源集合了85个常用的jar包,旨在满足一般项目开发的需求。这些jar包覆盖了多个核心领域,包括但不限于数据库访问、持久化、MVC框架、数据校验、网络通信等。现在,我们来详细探讨一下这些标签所...

    J2EE常用框架

    总结来说,J2EE常用框架包括Spring、Hibernate、MyBatis、Struts和EJB等,这些框架协同工作,为开发者提供了构建大型企业级应用的强大工具。同时,掌握相关开发工具和资源,如IDEA、Maven和MyBatis指南,将极大地...

    J2ee常用jar包

    在J2EE开发中,`jar`(Java Archive)文件扮演了至关重要的角色,它们包含了编译后的Java类、资源文件以及元数据,方便在项目中进行共享和重用。下面我们将深入探讨J2EE中常用的`jar`包以及它们的功能。 1. **...

    介绍J2EE常用Jar包的含义.doc

    - **用途**: 包含了一些Bean工具类,如Bean复制等,被Hibernate等框架广泛使用。 - **应用场景**: 需要进行Bean操作的地方,如属性复制、属性访问等。 10. **commons-cli-1.0.jar** - **用途**: 命令行参数解析...

    j2EE面试题分类集合

    - **多线程**:线程的创建方式、同步机制(synchronized、wait/notify、Lock等)及并发工具类。 2. **Java Web**: - **Servlet**:HTTP请求的处理,生命周期,以及与JSP的交互。 - **JSP**:动态网页生成,EL...

    GenerateEntity J2EE开发快速生成实体类的工具类

    J2EE开发中,对照MySQL数据库中的表和字段,快速生成Java中的实体类的工具类,有助于快速开发。

    J2EE常用的jar包

    4. `struts-bean.jar`:包含BeanUtils工具类,用于对象属性的封装和转换。 接下来,Spring是一个全面的后端框架,它的功能涵盖了依赖注入、事务管理、AOP(面向切面编程)等。Spring的主要JAR包有: 1. `spring-...

    J2EE项目开发常用的jar包

    9. **Apache Commons**:如commons-lang3.jar、commons-io.jar等,Apache Commons提供了许多实用的工具类和通用功能,如字符串处理、文件操作等。 10. **Log4j或SLF4J**:如log4j.jar、slf4j-api.jar和相应的实现库...

    j2ee开发常用jar 包

    这里,`HibernateUtil`通常是一个工具类,用于初始化并提供SessionFactory。整个过程简洁明了,无需手动编写SQL,大大降低了开发复杂度。 总结起来,"j2ee开发常用jar 包2: Hibernate"主要涵盖了Hibernate作为J2EE...

    j2ee包介绍j2ee包j2ee包j2ee包

    J2EE包通常包含一系列的库和技术,这些技术涵盖了从数据库连接、事务处理到Web服务等多个方面。在J2EE应用中,开发者可以利用这些库来构建模块化、可伸缩且易于维护的系统。 **Ant构建工具** 在描述中提到了Ant,...

    J2EE命令速查手册-新手必备工具

    这个手册是基于一本专业的J2EE工具书编写的,旨在简化J2EE学习曲线,为新手提供便捷的学习资源。 J2EE是企业级Java开发的一个标准平台,它包含了用于构建分布式、多层应用的一系列组件和服务,如Servlet、Java...

    j2ee开发中常用jar包的作用PDF

    10. **Apache Commons库**:如commons-lang3.jar、commons-io.jar,提供了许多实用的工具类和方法,提高了开发效率。 11. **JSON处理**:如json.jar或gson.jar,用于JSON数据的序列化和反序列化,便于数据交换。 ...

    j2ee开发使用的API(中文版)

    `javax.servlet`和`javax.servlet.http`包包含了Servlet和HttpServlet类,使得开发者可以编写处理网络请求的代码。 2. **JSP(JavaServer Pages)API**:JSP是一种基于Java的动态网页技术,它将HTML和Java代码结合...

    servlet系统工具类

    韩顺平.2011最新j2ee视频教程.细说servlet用户管理系统工具类

    j2ee商城后台管理系统

    本文将深入探讨一个基于J2EE技术的商城后台管理系统,它利用了jsp、servlet以及JDBCUtil工具类,为数据库操作提供便利。 首先,J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于开发和部署...

Global site tag (gtag.js) - Google Analytics