日期工具:日期转换、加减、比较 --DateUtils

/******************************************************************************
 * CREATETIME : 2014年6月26日 下午8:06:14
 ******************************************************************************/
package ins.platform.utils;

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

/**
 * 日期工具:日期转换、加减、比较
 */
public class DateUtils {

    /*** 年到月日期格式 yyyy-MM */
    public static final String YToMon = "yyyy-MM";
    /*** 年到天日期格式 yyyy-MM-dd */
    public static final String YToDay = "yyyy-MM-dd";
    /*** 年到分日期时间格式 yyyy-MM-dd HH:mm */
    public static final String YToHour = "yyyy-MM-dd HH";
    /*** 年到分日期时间格式 yyyy-MM-dd HH:mm */
    public static final String YToMin = "yyyy-MM-dd HH:mm";
    /*** 年到秒日期时间格式 yyyy-MM-dd HH:mm:ss */
    public static final String YToSec = "yyyy-MM-dd HH:mm:ss";
    /*** 年到毫秒日期时间格式 yyyy-MM-dd HH:mm:ss:SSS*/
    public static final String YToSecSSS = "yyyy-MM-dd HH:mm:ss:SSS";
    /*** 年到天日期格式 yyyyMMdd */
    public static final String YMD = "yyyyMMdd";
    /*** 年到小时日期格式 yyyyMMddHH */
    public static final String YMDH = "yyyyMMddHH";
    /*** 年到分钟日期格式 yyyyMMddHHmm */
    public static final String YMDHM = "yyyyMMddHHmm";
    /*** 年到秒数日期格式 yyyyMMddHHmmss */
    public static final String YMDHMS = "yyyyMMddHHmm";
    /*** 年到毫秒数日期格式 yyyyMMddHHmmssSSS */
    public static final String YMDHMSSSS = "yyyyMMddHHmmSSS";

    /*** 年 */
    public static final int YEAR = Calendar.YEAR;
    /** 月 */
    public static final int MONTH = Calendar.MONTH;
    /** 天 */
    public static final int DAY = Calendar.DAY_OF_MONTH;
    /** 时 */
    public static final int HOUR = Calendar.HOUR_OF_DAY;
    /** 分 */
    public static final int MINUTE = Calendar.MINUTE;

    /*** 默认日期格式 */
    // 这里可以增加更多的日期格式,用得多的放在前面
    private static final String[] parsePatterns = new String[] { YToDay, YToSec, YToHour, YToMin, YMD,
            "yyyy-MM-dd HH:mm:ss.SSS" };

    /**
     * 现在时间 Date类型
     *
     * @return
     */
    public static Date now() {
        return new Date();
    }

    /**
     * 现在时间 Date类型,自定义格式,不建议使用此方法,此方法以被 now(int field)方法代替
     *
     * @param format
     * @return
     * @throws ParseException
     */
    @Deprecated
    public static Date now(String format) throws ParseException {
        String nowStr = dateToStr(new Date(), format);
        return strToDate(nowStr, format);
    }

    /**
     * 根据精度获取当前时间, 例如:<br>
     * DateUtils.now(DateUtils.MONTH)=2014-07-01 00:00:00<br>
     * DateUtils.now(DateUtils.DAY)        =2014-07-10 00:00:00<br>
     * @param field
     */
    public static Date now(int field) {
        return trunc(new Date(), field);
    }

    /**
     * 将日期取整到天<br>
     * 例如 :trunc(2014-07-10 09:59:00)得到日期2014-07-10 00:00:00
     * @param date
     */
    public static Date trunc(Date date) {
        return trunc(date, DAY);
    }

    /**
     * 日期时间取整<br>
     * 例如 : dateStr = "2014-07-10 09:59:03";<br>
     * DateUtils.trunc(date, DateUtils.DAY)=2014-07-10 00:00:00<br>
     * DateUtils.trunc(date, DateUtils.HOUR)=2014-07-10 09:00:00<br>
     * DateUtils.trunc(date, DateUtils.MINUTE)=2014-07-10 09:59:00<br>
     * @param date 日期
     * @param field 取整到哪个精度
     */
    public static Date trunc(Date date, int field) {
        return org.apache.commons.lang3.time.DateUtils.truncate(date, field);
    }

    /**
     * 现在时间,yyyy-MM-dd HH:mm:ss 的格式
     *
     * @return
     */
    public static String nowStr() {
        return dateToStr(new Date(), YToSec);
    }

    /**
     * 根据指定格式获取当前时间,返回字符串,
     * @return
     */
    public static String nowStr(String format) {
        return dateToStr(new Date(), format);
    }

    /**
     * 将string类型的日期格式转换为Date,不用指定格式,根据变量parsePatterns按顺序自动匹配
     * @param dateStr
     * @return
     * @throws ParseException
     * @modified: ☆LiuPing(2014年7月10日 上午9:20:55): <br>
     */
    public static Date strToDate(String dateStr) throws ParseException {
        if (dateStr == null || dateStr.trim().equals("")) {
            return null;
        }
        return org.apache.commons.lang3.time.DateUtils.parseDate(dateStr, parsePatterns);
    }
    /**
     * 将string类型的日期格式转换为Date
     *
     * @param dateStr
     * @param format
     * @return
     * @throws ParseException
     */
    public static Date strToDate(String dateStr, String format) throws ParseException {
        if(dateStr==null||dateStr.trim().equals("")){
            return null;
        }
        DateFormat myFormat = new SimpleDateFormat(format);
        return myFormat.parse(dateStr.trim());
    }

    /**
     * 将date按格式转换为String
     *
     * @param date
     * @param format
     * @return
     * @throws ParseException
     */
    public static String dateToStr(Date date, String format) {
        if (date == null)
            return "";
        DateFormat myFormat = new SimpleDateFormat(format);
        return myFormat.format(date);
    }

    /**
     * 年份加减
     *
     * @param date
     * @param amount
     * @return
     */
    public static Date addYears(Date date, int amount) {
        return add(date, Calendar.YEAR, amount);
    }

    public static Date addMonths(Date date, int amount) {
        return add(date, Calendar.MONTH, amount);
    }

    public static Date addWeeks(Date date, int amount) {
        return add(date, Calendar.WEEK_OF_YEAR, amount);
    }

    public static Date addDays(Date date, int amount) {
        return add(date, Calendar.DATE, amount);
    }

    public static Date addHours(Date date, int amount) {
        return add(date, Calendar.HOUR_OF_DAY, amount);
    }

    public static Date addMinutes(Date date, int amount) {
        return add(date, Calendar.MINUTE, amount);
    }

    public static Date add(Date date, int calendarField, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(calendarField, amount);
        return c.getTime();
    }

    /**
     * date1-date2 相差多少天
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int compareDays(Date date1, Date date2) {
        long disSes = date1.getTime() - date2.getTime();
        return (int) (disSes / (1000 * 60 * 60 * 24));
    }

    /**
     * date1-date2 相差多少月,计算短期费率(不满一月当作一月)
     * @param date1
     * @param date2
     * @return
     */
    public static int compareMonthsShortRate(Date date1, Date date2){
        int year1 = getFieldValue(date1,DateUtils.YEAR);//date1年份
        int month1 = getFieldValue(date1,DateUtils.MONTH);//date1月份
        int day1 = getFieldValue(date1,DateUtils.DAY);//date1日期
        int hour1 = getFieldValue(date1,DateUtils.HOUR);//date1小时
        int year2 = getFieldValue(date2,DateUtils.YEAR);//date2年份
        int month2 = getFieldValue(date2,DateUtils.MONTH);//date2月份
        int day2 = getFieldValue(date2,DateUtils.DAY);//date2日期
        int hour2 = getFieldValue(date2,DateUtils.HOUR);//date2小时
        
        int monthValues = (year1 - year2)*12 +(month1 - month2);//月份差
        if((day1 - day2 >0)||((day1 == day2)&&(hour1<hour2))){
            monthValues += 1;
        }
        return monthValues;
    }
    
    /**
     * date1-date2相差的分钟数
     * @param date1
     * @param date2
     * @return
     */
    public static int compareMinutes(Date date1, Date date2){
        if(date1 == null || date2 == null){
            return -1;
        }
        long timeOne=date1.getTime();
        long timeTwo=date2.getTime();
        long minutes=(timeOne-timeTwo)/(1000*60);//转化minutes
        return (int)minutes;
    }
    
    /**
     * 相差多少月,计算实际价值(不满则减)
     * @param date1
     * @param date2
     * @return
     */
    public static int compareMonths(Date date1, Date date2){
        int year1 = getFieldValue(date1,DateUtils.YEAR);//date1年份
        int month1 = getFieldValue(date1,DateUtils.MONTH);//date1月份
        int day1 = getFieldValue(date1,DateUtils.DAY);//date1日期
        int hour1 = getFieldValue(date1,DateUtils.HOUR);//date1小时
        int year2 = getFieldValue(date2,DateUtils.YEAR);//date2年份
        int month2 = getFieldValue(date2,DateUtils.MONTH);//date2月份
        int day2 = getFieldValue(date2,DateUtils.DAY);//date2日期
        int hour2 = getFieldValue(date2,DateUtils.HOUR);//date2小时
        
        int monthValues = (year1 - year2)*12 +(month1 - month2);//月份差
        if((day1 - day2 <0)||((day1 == day2)&&(hour1>hour2))){
            monthValues -= 1;
        }
        return monthValues;
    }
    /**
     * 换算为一天的最后一秒
     *
     * @param endDate
     * @return
     */
    public static Date toDateEnd(Date endDate) {
        if (endDate == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(endDate);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }

    /**
     * 给日期设置小时
     * @param date
     * @param hour
     */
    public static Date getDateByValue(Date date, Integer hour) {
        return getDateByValue(date, hour, 0);
    }

    /**
     * 给日期设置小时和分钟
     * @param date
     * @param hour
     * @param munite
     * @return
     */
    public static Date getDateByValue(Date date, Integer hour, Integer minute) {
        if (hour == null) hour = 0;
        if (minute == null) minute = 0;
        Date newDate = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR,hour);
        c.set(Calendar.MINUTE,minute);
        newDate.setTime(c.getTimeInMillis());
        return newDate;
    }
    
    /**
     * 获取属性值
     * @param date 日期
     * @param field 属性(年、月、日等)
     * @return
     * @modified:
     */
    public static int getFieldValue(Date date,int field){
        int fieldValue = 0;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        fieldValue = c.get(field);
        return fieldValue;
    }
    
    public static void main(String[] args) throws ParseException {
        String dateStr = "2014-07-10 09:59:03";
        Date date = DateUtils.strToDate(dateStr);

        System.out.println("DateUtils.now(DateUtils.MONTH)="
                + DateUtils.dateToStr(DateUtils.now(DateUtils.MONTH), DateUtils.YToSec));
        System.out.println("DateUtils.now(DateUtils.DAY)="
                + DateUtils.dateToStr(DateUtils.now(DateUtils.DAY), DateUtils.YToSec));
        System.out.println("DateUtils.trunc(date, DateUtils.DAY)="
                + DateUtils.dateToStr(DateUtils.trunc(date, DateUtils.DAY), DateUtils.YToSec));
        System.out.println("DateUtils.trunc(date, DateUtils.HOUR)="
                + DateUtils.dateToStr(DateUtils.trunc(date, DateUtils.HOUR), DateUtils.YToSec));
        System.out.println("DateUtils.trunc(date, DateUtils.MINUTE)="
                + DateUtils.dateToStr(DateUtils.trunc(date, DateUtils.MINUTE), DateUtils.YToSec));
    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值