JAVA 中日期处理方法

由于java中对日期 的处理不是很人性化,特将总结出来的一些日期处理方法贴出来。非常感谢原创。留做记忆。

 

package com.ebt.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public abstract class TimeUtil {

    // ---当前日期的年,月,日,时,分,秒
    public static Calendar now = Calendar.getInstance();
    int year = now.get(Calendar.YEAR);
    int date = now.get(Calendar.DAY_OF_MONTH);
    int month = now.get(Calendar.MONTH) + 1;
    int hour = now.get(Calendar.HOUR);
    int min = now.get(Calendar.MINUTE);
    int sec = now.get(Calendar.SECOND);

    // -------------------------------日期类型转换---------------------------------------------------------------------------
    /**
     * 字符型日期转化util.Date型日期
     *
     * @Param:p_strDate 字符型日期
     *
     * @param p_format 格式:"yyyy-MM-dd" / "yyyy-MM-dd hh:mm:ss"
     *
     * @Return:java.util.Date util.Date型日期
     *
     * @Throws: ParseException
     */
    public static java.util.Date toUtilDateFromStrDateByFormat(
            String p_strDate, String p_format) throws ParseException {
        java.util.Date l_date = null;
        java.text.DateFormat df = new java.text.SimpleDateFormat(p_format);
        if (p_strDate != null && (!"".equals(p_strDate)) && p_format != null
                && (!"".equals(p_format))) {
            l_date = df.parse(p_strDate);
        }
        return l_date;
    }

    /**
     * 字符型日期转化成sql.Date型日期
     *
     * @param p_strDate 字符型日期
     *
     * @return java.sql.Date sql.Date型日期
     *
     * @throws ParseException
     */
    public static java.sql.Date toSqlDateFromStrDate(String p_strDate)
            throws ParseException {
        java.sql.Date returnDate = null;
        java.text.DateFormat sdf = new java.text.SimpleDateFormat();
        if (p_strDate != null && (!"".equals(p_strDate))) {
            returnDate = new java.sql.Date(sdf.parse(p_strDate).getTime());
        }
        return returnDate;
    }

    /**
     * util.Date型日期转化指定格式的字符串型日期
     *
     * @param p_date Date
     *
     * @param p_format String 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
     * 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
     *
     * @return String
     */
    public static String toStrDateFromUtilDateByFormat(
            java.util.Date p_utilDate, String p_format) throws ParseException {
        String l_result = "";
        if (p_utilDate != null) {
            SimpleDateFormat sdf = new SimpleDateFormat(p_format);
            l_result = sdf.format(p_utilDate);
        }
        return l_result;
    }

    /**
     * util.Date型日期转化转化成Calendar日期
     *
     * @param p_utilDate Date
     *
     * @return Calendar
     */
    public static Calendar toCalendarFromUtilDate(java.util.Date p_utilDate) {
        Calendar c = Calendar.getInstance();
        c.setTime(p_utilDate);
        return c;
    }

    /**
     * util.Date型日期转化sql.Date(年月日)型日期
     *
     * @Param: p_utilDate util.Date型日期
     *
     * @Return: java.sql.Date sql.Date型日期
     */
    public static java.sql.Date toSqlDateFromUtilDate(java.util.Date p_utilDate) {
        java.sql.Date returnDate = null;
        if (p_utilDate != null) {
            returnDate = new java.sql.Date(p_utilDate.getTime());
        }
        return returnDate;
    }

    /**
     * util.Date型日期转化sql.Time(时分秒)型日期
     *
     * @Param: p_utilDate util.Date型日期
     *
     * @Return: java.sql.Time sql.Time型日期
     */
    public static java.sql.Time toSqlTimeFromUtilDate(java.util.Date p_utilDate) {
        java.sql.Time returnDate = null;
        if (p_utilDate != null) {
            returnDate = new java.sql.Time(p_utilDate.getTime());
        }
        return returnDate;
    }

    /**
     * util.Date型日期转化sql.Date(时分秒)型日期
     *
     * @Param: p_utilDate util.Date型日期
     *
     * @Return: java.sql.Timestamp sql.Timestamp型日期
     */
    public static java.sql.Timestamp toSqlTimestampFromUtilDate(
            java.util.Date p_utilDate) {
        java.sql.Timestamp returnDate = null;
        if (p_utilDate != null) {
            returnDate = new java.sql.Timestamp(p_utilDate.getTime());
        }
        return returnDate;
    }

    /**
     * sql.Date型日期转化util.Date型日期
     *
     * @Param: sqlDate sql.Date型日期
     *
     * @Return: java.util.Date util.Date型日期
     */
    public static java.util.Date toUtilDateFromSqlDate(java.sql.Date p_sqlDate) {
        java.util.Date returnDate = null;
        if (p_sqlDate != null) {
            returnDate = new java.util.Date(p_sqlDate.getTime());
        }
        return returnDate;
    }

    // -----------------获取指定日期的年份,月份,日份,小时,分,秒,毫秒----------------------------
    /**
     * 获取指定日期的年份
     *
     * @param p_date util.Date日期
     *
     * @return int 年份
     */
    public static int getYearOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.YEAR);
    }

    /**
     * 获取指定日期的月份
     *
     * @param p_date util.Date日期
     *
     * @return int 月份
     */
    public static int getMonthOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.MONTH) + 1;
    }

    /**
     * 获取指定日期的日份
     *
     * @param p_date util.Date日期
     *
     * @return int 日份
     */
    public static int getDayOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取指定日期的小时
     *
     * @param p_date util.Date日期
     *
     * @return int 日份
     */
    public static int getHourOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.HOUR_OF_DAY);
    }

    /**
     * 获取指定日期的分钟
     *
     * @param p_date util.Date日期
     *
     * @return int 分钟
     */
    public static int getMinuteOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.MINUTE);
    }

    /**
     * 获取指定日期的秒钟
     *
     * @param p_date util.Date日期
     *
     * @return int 秒钟
     */
    public static int getSecondOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.get(java.util.Calendar.SECOND);
    }

    /**
     * 获取指定日期的毫秒
     *
     * @param p_date util.Date日期
     *
     * @return long 毫秒
     */
    public static long getMillisOfDate(java.util.Date p_date) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        c.setTime(p_date);
        return c.getTimeInMillis();
    }

    // -----------------获取当前/系统日期(指定日期格式)-----------------------------------------------------------------------------------
    /**
     * 获取指定日期格式当前日期的字符型日期
     *
     * @param p_format 日期格式 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
     * 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
     *
     * @return String 当前时间字符串
     */
    public static String getNowOfDateByFormat(String p_format) {
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(p_format);
        String dateStr = sdf.format(d);
        return dateStr;
    }

    /**
     * 获取指定日期格式系统日期的字符型日期
     *
     * @param p_format 日期格式 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
     * 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
     *
     * @return String 系统时间字符串
     *
     */
    public static String getSystemOfDateByFormat(String p_format) {
        long time = System.currentTimeMillis();
        Date d = new Date(time);
        SimpleDateFormat sdf = new SimpleDateFormat(p_format);
        String dateStr = sdf.format(d);
        return dateStr;
    }

    /**
     * 获取字符日期一个月的天数
     *
     * @param p_date
     * @return 天数
     * @author zhuqx
     */
    public static long getDayOfMonth(Date p_date) throws ParseException {
        int year = getYearOfDate(p_date);
        int month = getMonthOfDate(p_date) - 1;
        int day = getDayOfDate(p_date);
        int hour = getHourOfDate(p_date);
        int minute = getMinuteOfDate(p_date);
        int second = getSecondOfDate(p_date);
        Calendar l_calendar = new GregorianCalendar(year, month, day, hour,
                minute, second);
        return l_calendar.getActualMaximum(l_calendar.DAY_OF_MONTH);
    }

    // -----------------获取指定月份的第一天,最后一天
    // ---------------------------------------------------------------------------
    /**
     * 获取指定月份的第一天
     *
     * @param p_strDate 指定月份
     *
     * @param p_formate 日期格式
     *
     * @return String 时间字符串
     *
     */
    public static String getDateOfMonthBegin(String p_strDate, String p_format)
            throws ParseException {
        java.util.Date date = toUtilDateFromStrDateByFormat(p_strDate, p_format);
        return toStrDateFromUtilDateByFormat(date, "yyyy-MM") + "-01";
    }

    /**
     * 获取指定月份的最后一天
     *
     * @param p_strDate 指定月份
     *
     * @param p_formate 日期格式
     *
     * @return String 时间字符串
     *
     */
    public static String getDateOfMonthEnd(String p_strDate, String p_format)
            throws ParseException {
        java.util.Date date = toUtilDateFromStrDateByFormat(
                getDateOfMonthBegin(p_strDate, p_format), p_format);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return toStrDateFromUtilDateByFormat(calendar.getTime(), p_format);
    }

    /**
     * 获取指定日期是星期几
     *
     * @param p_strDate 指定日期
     *
     * @param p_format  日期格式
     *
     * @return  String "星期几"字符串
     * @throws ParseException
     *
     */
    public static String getWeek(String p_strDate, String p_format) throws ParseException{
        Date myDate = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(p_format);
            myDate  = sdf.parse(p_strDate);
            SimpleDateFormat s = new SimpleDateFormat("E");
        return s.format(myDate);
    }
}

 

 

 

 

 

 

 

 

 

package com.ebt.util;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.apache.log4j.Logger;

public class DateUtil extends TimeUtil {

    private static final Logger logger = Logger.getLogger(DateUtil.class);

    public DateUtil() {
    }

    // ----------------------日期计算------------------------------

    /**
     * 是否开始日期在结束日期之前(不包括相等)
     *
     * @param p_startDate   开始日期
     *
     * @param p_endDate 结束日期
     *
     * @return boolean 在结束日期前:ture;否则:false
     *
     */
    public boolean isStartDateBeforeEndDate(Date p_startDate,
            Date p_endDate) throws ParseException {
        long l_startTime = getMillisOfDate(p_startDate);
        long l_endTime = getMillisOfDate(p_endDate);
        return (l_startTime - l_endTime > (long) 0) ? true : false;
    }

    /**
     * 获取2个字符日期的天数差
     *
     * @param p_startDate
     *
     * @param p_endDate
     *
     * @return 天数差
     *
     */
    public long getDaysOfTowDiffDate(String p_startDate, String p_endDate)
            throws ParseException {

        Date l_startDate = toUtilDateFromStrDateByFormat(p_startDate,
                "yyyy-MM-dd");
        Date l_endDate = toUtilDateFromStrDateByFormat(p_endDate, "yyyy-MM-dd");
        long l_startTime = getMillisOfDate(l_startDate);
        long l_endTime = getMillisOfDate(l_endDate);
        long betweenDays = (long) ((l_endTime - l_startTime) / (1000 * 60 * 60 * 24));
        return betweenDays;
    }

    /**
     * 获取2个字符日期的周数差
     *
     * @param p_startDate
     *
     * @param p_endDate
     *
     * @return 周数差
     *
     */
    public long getWeeksOfTowDiffDate(String p_startDate,
            String p_endDate) throws ParseException {
        return getDaysOfTowDiffDate(p_startDate, p_endDate) / 7;
    }

    /**
     * 获取2个字符日期的月数差
     *
     * @param p_startDate
     *
     * @param p_endDate
     *
     * @return 月数差
     */
    public long getMonthsOfTowDiffDate(String p_startDate,
            String p_endDate) throws ParseException {
        return getDaysOfTowDiffDate(p_startDate, p_endDate) / 30;
    }

    /**
     * 获取2个字符日期的年数差
     *
     * @param p_startDate
     *
     * @param p_endDate
     *
     * @return 年数差
     *
     */
    public long getYearsOfTowDiffDate(String p_startDate,
            String p_endDate) throws ParseException {
        return getDaysOfTowDiffDate(p_startDate, p_endDate) / 365;
    }

    /**
     * 在给定的日期基础上添加年,月,日、时,分,秒 例如要再2006-10-21(uitl日期)添加3个月,并且格式化为yyyy-MM-dd格式,
     * 这里调用的方式为 addDate(2006-10-21,3,Calendar.MONTH,"yyyy-MM-dd")
     *
     * @param p_startDate 给定的日期
     *
     * @param p_count 时间的数量
     *
     * @param p_field 添加的域
     *
     * @param p_format 时间转化格式,例如:yyyy-MM-dd hh:mm:ss 或者yyyy-mm-dd等
     *
     * @return 添加后格式化的时间
     *
     */
    public String addDate(Date p_startDate, int p_count, int p_field,
            String p_format) throws ParseException {

        // 年,月,日、时,分,秒
        int l_year = getYearOfDate(p_startDate);
        int l_month = getMonthOfDate(p_startDate) - 1;
        int l_day = getDayOfDate(p_startDate);
        int l_hour = getHourOfDate(p_startDate);
        int l_minute = getMinuteOfDate(p_startDate);
        int l_second = getSecondOfDate(p_startDate);
        Calendar l_calendar = new GregorianCalendar(l_year, l_month, l_day,
                l_hour, l_minute, l_second);
        l_calendar.add(p_field, p_count);
        return toStrDateFromUtilDateByFormat(l_calendar.getTime(), p_format);
    }
   
    public static void main(String[] args) {
        try {
            DateUtil du = new DateUtil();
            System.out.println(du.getDaysOfTowDiffDate("2010-10-09","2010-10-15"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值