欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java时间工具类,

来源: javaer 分享于  点击 6808 次 点评:3

Java时间工具类,


Java时间工具类
package com.csair.rost.rcp.internal.util;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * 
 * @ClassName: DateUtils
 * @Description: 日期工具类
 * @author: duwufeng
 * @date: Oct 15, 2014
 * 
 */
public class DateUtils {
    
    /**
     * 获取日期中的某数值。如获取月份
     * 
     * @param date
     *            日期
     * @param dateType
     *            日期格式
     * @return 数值
     */
    public static Integer getInteger(Date date, int dateType) {
        Integer integer = null;
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            integer = calendar.get(dateType);
            if (dateType == Calendar.MONTH) {//如果是月份,Calendar是从0开始的,需要+1
                integer++;
            }
        } catch (Exception e) {
        }
        return integer;
    }
    
    /**
     * 获取日期的年份。失败返回null。
     * 
     * @param date
     *            日期
     * @return 年份
     */
    public static Integer getYear(Date date) {
        return getInteger(date, Calendar.YEAR);
    }
    
    /**
     * 获取日期的月份。失败返回null。
     * 
     * @param date
     *            日期
     * @return 月份
     */
    public static Integer getMonth(Date date) {
        return getInteger(date, Calendar.MONTH);
    }
    
    /**
     * 获取日期的天数。失败返回null。
     * 
     * @param date
     *            日期
     * @return 天
     */
    public static Integer getDay(Date date) {
        return getInteger(date, Calendar.DATE);
    }
    
    /**
     * 获取日期的小时。失败返回null。
     * 
     * @param date
     *            日期
     * @return 小时
     */
    public static Integer getHour(Date date) {
        return getInteger(date, Calendar.HOUR_OF_DAY);
    }
    
    /**
     * 获取日期的分钟。失败返回null。
     * 
     * @param date
     *            日期
     * @return 分钟
     */
    public static Integer getMinute(Date date) {
        return getInteger(date, Calendar.MINUTE);
    }
    
    /**
     * 获取日期的秒钟。失败返回null。
     * 
     * @param date
     *            日期
     * @return 秒钟
     */
    public static Integer getSecond(Date date) {
        return getInteger(date, Calendar.SECOND);
    }
    
    /**
     * 创建日期
     * 
     * @param year
     * @param month
     * @param date
     * @return
     */
    public static Date createDate(int year, int month, int date) {
        Calendar calendar = Calendar.getInstance();
        month--;
        calendar.set(year, month, date);
        return calendar.getTime();
    }
    
    /**
     * 创建日期
     * 
     * @param year
     * @param month
     * @param date
     * @param hourOfDay
     * @param minute
     * @return
     */
    public static Date createDate(int year, int month, int date, int hourOfDay,
            int minute) {
        Calendar calendar = Calendar.getInstance();
        month--;
        calendar.set(year, month, date, hourOfDay, minute);
        return calendar.getTime();
    }
    
    /**
     * 创建日期
     * 
     * @param year
     * @param month
     * @param date
     * @param hourOfDay
     * @param minute
     * @param second
     * @return
     */
    public static Date createDate(int year, int month, int date, int hourOfDay,
            int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        month--;
        calendar.set(year, month, date, hourOfDay, minute, second);
        return calendar.getTime();
    }
    
    /**
     * 日期转成字符串
     * 
     * @param date
     * @return
     */
    public static String format(Date date) {
        String result = null;
        if (date != null) {
            SimpleDateFormat format = new SimpleDateFormat(DateStyle.YYYY_MM_DD.getValue());
            result = format.format(date);
        }
        return result;
    }
    
    /**
     * 日期转成字符串
     * 
     * @param date
     * @param pattern
     * @return
     */
    public static String format(Date date, String pattern) {
        String result = null;
        if (pattern == null) {
            pattern = DateStyle.YYYY_MM_DD.getValue();
        }
        if (date != null) {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            result = format.format(date);
        }
        return result;
    }
    
    /**
     * 字符串转成日期
     * 
     * @param dateStr
     * @param pattern
     * @return
     */
    public static Date toDate(String dateStr, String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 增加日期的某一个值(如增加一年/一月/一天)
     * @param date
     * @param dateType
     * @param addNum
     * @return
     */
    public static Date add(Date date, int dateType, int addNum) {
        Date result = null;
        if (date != null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(dateType, addNum);
            result = calendar.getTime();
        }
        return result;
    }
    /**
     * 将日期往后推addNum天
     * 
     * @param date
     * @param addNum
     * @return
     */
    public static Date addDay(Date date, int addNum) {
        return add(date, Calendar.DATE, addNum);
    }
    
    /**
     * 将日期往后推addNum月
     * 
     * @param date
     * @param addNum
     * @return
     */
    public static Date addMonth(Date date, int addNum) {
        return add(date, Calendar.MONTH, addNum);
    }
    
    /**
     * 将日期往后推addNum年
     * 
     * @param date
     * @param addNum
     * @return
     */
    public static Date addYear(Date date, int addNum) {
        return add(date, Calendar.YEAR, addNum);
    }
    
    /**
     * 判断两个日期前后,只判断到天
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static boolean before(Date date1, Date date2) {
        return compare(date1, date2) < 0 ? true : false;
    }
    
    /**
     * 判断两个日期前后,只判断到天
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static boolean after(Date date1, Date date2) {
        return compare(date1, date2) > 0 ? true : false;
    }
    
    /**
     * 判断两个日期是为同一天
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static boolean equals(Date date1, Date date2) {
        return compare(date1, date2) == 0 ? true : false;
    }
    
    /**
     * 比较两个日期,date1大的返回1
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static int compare(Date date1, Date date2) {
        String dateStr1 = format(date1);
        String dateStr2 = format(date2);
        return dateStr1.compareTo(dateStr2);
    }
    
    /**
     * 计算两个日期相差天数,1号到3号相差3天,不管小时
     * 
     * @param littleDate
     * @param bigDate
     * @return
     */
    public static int differActualDay(Date littleDate, Date bigDate) {
        if (littleDate.after(bigDate)) {
            Date tem = littleDate;
            littleDate = bigDate;
            bigDate = tem;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(littleDate);
        int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);// 小时间的当月的最后一天
        int littleNum = calendar.get(Calendar.DAY_OF_MONTH);// 小时间为当月的某一天。例如:当月第25天
        
        calendar.setTime(bigDate);
        int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);// 大时间的当月的第一天
        int bigNum = calendar.get(Calendar.DAY_OF_MONTH);// 大时间为当月的某一天。例如:当月第26天
        
        int dayNum = 0;
        if (bigNum < littleNum) {// 跨月(只夸一月)
            dayNum = (lastDay - littleNum + bigNum - firstDay + 2);
        } else {
            dayNum = (bigNum - littleNum + 1);
        }
        return dayNum;
        
    }
    
    /**
     * 计算两个日期间隔天数
     * 
     * @param littleDate
     * @param bigDate
     * @return
     */
    public static double differDay(Date littleDate, Date bigDate) {
        return differ(littleDate, bigDate, 1000 * 60 * 60 *24);
    }
    
    /**
     * 计算两个日期间隔小时数
     * 
     * @param littleDate
     * @param bigDate
     * @return
     */
    public static double differHours(Date littleDate, Date bigDate) {
        return differ(littleDate, bigDate, 1000 * 60 * 60);
    }
    
    /**
     * 计算两个日期间隔分钟数
     * 
     * @param littleDate
     * @param bigDate
     * @return
     */
    public static double differMinute(Date littleDate, Date bigDate) {
        return differ(littleDate, bigDate, 1000 * 60);
    }
    
    /**
     * 计算两个日期间隔秒数
     * 
     * @param littleDate
     * @param bigDate
     * @return
     */
    public static double differSecond(Date littleDate, Date bigDate) {
        return differ(littleDate, bigDate, 1000);
    }
    /**
     * 根据计量单位计算计算两个日期间隔秒数(1000)/分钟数(1000*60)/小时数(1000*60*60)/天数(1000*60*60*24)
     * @param littleDate
     * @param bigDate
     * @param divider 计量单位
     * @return
     */
    private static double differ(Date littleDate, Date bigDate, int divider) {
        if (littleDate.after(bigDate)) {
            Date tem = littleDate;
            littleDate = bigDate;
            bigDate = tem;
        }
        BigDecimal bigDecimal = new BigDecimal(Integer.toString(divider));
        long result = bigDate.getTime() - littleDate.getTime();
        BigDecimal bigDecimal2 = new BigDecimal(Long.toString(result));
        BigDecimal decimal = bigDecimal2.divide(bigDecimal, 5, BigDecimal.ROUND_HALF_UP);
        return decimal.doubleValue();
    }
    /**
     * 获取日期的星期。失败返回null。
     * 
     * @param date
     *            日期
     * @return 星期
     */
    private static Week getWeek(Date date) {
        Week week = null;
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1;
            week = Week.getWeek(weekNumber);
        } catch (Exception e) {
        }
        return week;
    }
    /**
     * 获取中文的星期
     * @param date
     * @return
     */
    public static String getWeekCN(Date date) {
        if(date == null) {
            return null;
        }
        Week week = getWeek(date);
        return week.getChineseName();
    }
    /**
     * 获取英文的星期
     * @param date
     * @return
     */
    public static String getWeekEn(Date date) {
        return getWeekEn(date, false);
    }
    /**
     * 获取英文的星期
     * @param date
     * @param isShort 是否简写
     * @return
     */
    public static String getWeekEn(Date date, boolean isShort) {
        if(date == null) {
            return null;
        }
        Week week = getWeek(date);
        if(isShort) {
            return week.getEnShortName();
        }
        return week.getEnName();
    }
    /**
     * 获取星期的序号。星期日 为7
     * @param date
     * @return
     */
    public static int getWeekNum(Date date) {
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1;
            return Week.getWeek(weekNumber).getNumber();
        } catch (Exception e) {
        }
        return -1;
    }
}

enum Week {
    
    MONDAY("星期一", "Monday", "Mon", 1),
    TUESDAY("星期二", "Tuesday", "Tues", 2),
    WEDNESDAY("星期三", "Wednesday", "Wed", 3),
    THURSDAY("星期四", "Thursday", "Thur", 4),
    FRIDAY("星期五", "Friday", "Fri", 5),
    SATURDAY("星期六", "Saturday", "Sat", 6),
    SUNDAY("星期日", "Sunday", "Sun", 7);
    
    private String name_cn;
    private String name_en;
    private String name_enShort;
    private int number;
    private Week(String name_cn, String name_en, String name_enShort, int number) {
        this.name_cn = name_cn;
        this.name_en = name_en;
        this.name_enShort = name_enShort;
        this.number = number;
    }
    
    public static Week getWeek(int index) {
        while (index > 7) {
            index -= 7;
        }
        while (index < 1) {
            index += 7;
        }
        Week week = null;
        switch (index) {
        case 1:
            week = Week.MONDAY;
            break;
        case 2:
            week = Week.TUESDAY;
            break;
        case 3:
            week = Week.WEDNESDAY;
            break;
        case 4:
            week = Week.THURSDAY;
            break;
        case 5:
            week = Week.FRIDAY;
            break;
        case 6:
            week = Week.SATURDAY;
            break;
        case 7:
            week = Week.SUNDAY;
            break;
        }
        
        return week;
    }
    
    public String getChineseName() {
        return name_cn;
    }
    
    public String getEnName() {
        return name_en;
    }
    
    public String getEnShortName() {
        return name_enShort;
    }
    
    public int getNumber() {
        return number;
    }
}

enum DateStyle {
    MM_DD("MM-dd"),
    YYYY_MM("yyyy-MM"),
    YYYY_MM_DD("yyyy-MM-dd"),
    MM_DD_HH_MM("MM-dd HH:mm"),
    MM_DD_HH_MM_SS("MM-dd HH:mm:ss"),
    YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"),
    YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"),
    
    MM_DD_EN("MM/dd"),
    YYYY_MM_EN("yyyy/MM"),
    YYYY_MM_DD_EN("yyyy/MM/dd"),
    MM_DD_HH_MM_EN("MM/dd HH:mm"),
    MM_DD_HH_MM_SS_EN("MM/dd HH:mm:ss"),
    YYYY_MM_DD_HH_MM_EN("yyyy/MM/dd HH:mm"),
    YYYY_MM_DD_HH_MM_SS_EN("yyyy/MM/dd HH:mm:ss"),
    
    MM_DD_CN("MM月dd日"),
    YYYY_MM_CN("yyyy年MM月"),
    YYYY_MM_DD_CN("yyyy年MM月dd日"),
    MM_DD_HH_MM_CN("MM月dd日 HH:mm"),
    MM_DD_HH_MM_SS_CN("MM月dd日 HH:mm:ss"),
    YYYY_MM_DD_HH_MM_CN("yyyy年MM月dd日 HH:mm"),
    YYYY_MM_DD_HH_MM_SS_CN("yyyy年MM月dd日 HH:mm:ss"),
    
    HH_MM("HH:mm"),
    HH_MM_SS("HH:mm:ss");
    
    private String value;
    
    DateStyle(String value) {
        this.value = value;
    }
    
    public String getValue() {
        return value;
    }
}

相关文章

    暂无相关文章
相关栏目:

用户点评