日期操作DateUtil丶Date丶SimpleDateFormat丶Calendar

版权声明:如需转载或引用请声明原文网址 https://blog.csdn.net/u013087359/article/details/81108320
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 
 * @author Duson
 * @version V1.3
 * @date 2018-7-19
 *
 */
public class DateUtil {
    private static final String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四",
            "星期五", "星期六" };

    // 定义日期转换模式的数组
    private static final String[] patterns = { 
        "yyyy-MM-dd HH:mm:ss",
        "yyyy-MM-dd HH:mm",
        "yyyy-MM-dd HH",
        "yyyy-MM-dd",
        "yyyy-MM"
    };



    //_start 把日期按照默认的格式(yyyy-MM-dd HH:mm:ss)转换成字符串
    /**
     * 把日期按照默认的格式(yyyy-MM-dd HH:mm:ss)转换成字符串
     * @param date 被转换的日期
     * @return 转换后的日期字符串
     */
    public static String toStr(Date date) {
        return toStr(date, "yyyy-MM-dd HH:mm:ss");
    }
    //_end


    //_start 把日期按照指定的格式转换成字符串
    /**
     * 把日期按照指定的格式转换成字符串
     * @param date 被转换的日期
     * @param pattern 指定的转换格式
     * @return 转换后的日期字符串
     */
    public static String toStr(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
    //_end


    //_start 获取日期的年月日部分的字符串
    /**
     * 获取日期的年月日部分的字符串
     * @param date 被转换的日期
     * @return 日期的年月日部分
     */
    public static String toYMD(Date date) {
        return toStr(date, "yyyy-MM-dd");
    }
    //_end


    //_start 获取日期的时分秒部分的字符串
    /**
     * 获取日期的时分秒部分的字符串
     * @param date 被转换的日期
     * @return 日期的时分秒部分
     */
    public static String toHMS(Date date) {
        return toStr(date, "HH:mm:ss");
    }
    //_end


    //_start 日期格式验证(自动验证多种日期格式)
    /**
     * 日期格式验证(自动验证多种日期格式)
     * @param str - 被校验的字符串
     * @return 验证成功返回true,失败返回false
     */
    public static boolean isDate(String str) {    
        return toDate(str) != null;
    }
    //_end

    //_start 日期格式验证(按指定日期格式验证)
    /**
     * 日期格式验证(按指定日期格式验证)
     * @param str - 被校验的字符串
     * @return 验证成功返回true,失败返回false
     */
    public static boolean isDate(String str,String pattern) {
        return toDate(str,pattern) != null;
    }
    //_end

    //_start 字符串转换为日期(遍历多种日期转换格式),转换失败返回null
    /**
     * 字符串转换为日期(遍历多种日期转换格式),转换失败返回null
     * @param str 被转换的字符串
     * @return 转换后的日期,转换失败返回null
     */
    public static Date toDate(String str) {
        str=str.replaceAll("/", "-");
        // 遍历转换模式数组
        for (String pattern : patterns) {
            try {
                // 根据每个转换模式创建SimpleDateFormat对象,并且尝试把字符串值转换成日期

                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                sdf.setLenient(false);
                return sdf.parse(str);
            } catch (Exception e) {
                // 出现异常代表当前转换模式转换失败,因为数组中还有其他转换模式,所以要继续尝试转换
                continue;
            }
        }
        return null;
    }
    //_end

    //_start 把字符串转换成指定格式的日期,转换失败返回null
    /**
     * 把字符串转换成指定格式的日期
     * @param str 被转换的字符串
     * @param pattern 指定的日期转换格式
     * @return 转换后的日期,转换失败返回null
     */
    public static Date toDate(String str, String pattern) {
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        sdf.setLenient(false);  

        try {
            date = sdf.parse(str);
        } catch (ParseException e) {

        }
        return date;
    }
    //_end



    //_start 根据指定日期获取Calendar实例
    /**
     * 根据指定日期获取Calendar实例
     * @param date 指定的日期
     * @return Calendar实例
     */
    public static Calendar getCalendar(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c;
    }
    //_end

    //_start 根据指定日期字符串获取Calendar实例
    /**
     * 根据指定日期获取Calendar实例
     * @param date 指定的日期
     * @return 日期转换失败则返回null,转换成功则返回Calendar
     */
    public static Calendar getCalendar(String str) {
        Date date=toDate(str);
        if(date==null)return null;
        return getCalendar(date);
    }
    //_end

    //_start 获取指定日期的年
    /**
     * 获取指定日期的年
     * @param date 指定的日期
     * @return 日期的年
     */
    public static int getYear(Date date) {
        return getCalendar(date).get(Calendar.YEAR);
    }
    //_end

    //_start 获取指定日期的月
    /**
     * 获取指定日期的月
     * @param date 指定的日期
     * @return 日期的月
     */
    public static int getMonth(Date date) {
        return getCalendar(date).get(Calendar.MONTH);
    }
    //_end

    //_start 获取指定日期的日
    /**
     * 获取指定日期的日
     * @param date 指定的日期
     * @return 日期的日
     */
    public static int getDay(Date date) {
        return getCalendar(date).get(Calendar.DAY_OF_MONTH);
    }
    //_end

    //_start 获取指定日期的时
    /**
     * 获取指定日期的时
     * @param date 指定的日期
     * @return 日期的时
     */
    public static int getHour(Date date) {
        return getCalendar(date).get(Calendar.HOUR_OF_DAY);
    }
    //_end

    //_start 获取指定日期的分
    /**
     * 获取指定日期的分
     * @param date 指定的日期
     * @return 日期的分
     */
    public static int getMinute(Date date) {
        return getCalendar(date).get(Calendar.MINUTE);
    }
    //_end

    //_start 获取指定日期的秒
    /**
     * 获取指定日期的秒
     * @param date 指定的日期
     * @return 日期的秒
     */
    public static int getSecond(Date date) {
        return getCalendar(date).get(Calendar.SECOND);
    }
    //_end

    //_start 获取指定日期的星期
    /**
     * 获取指定日期的星期
     * @param date 指定的日期
     * @return 日期的星期
     */
    public static String getWeek(Date date) {
        Calendar c = getCalendar(date);
        int week = c.get(Calendar.DAY_OF_WEEK);
        return weeks[week - 1];
    }
    //_end



    //_start 日期的年加减操作
    /**
     * 日期的年加减操作
     * @param date 被操作的日期
     * @param year 增加的年(负数表示减)
     * @return 年加减后的日期
     */
    public static Date addYear(Date date, int year) {
        Calendar c = getCalendar(date);
        c.add(Calendar.YEAR, year);
        return c.getTime();
    }
    //_end

    //_start 日期的月加减操作
    /**
     * 日期的月加减操作
     * @param date 被操作的日期
     * @param month 增加的月(负数表示减)
     * @return 月加减后的日期
     */
    public static Date addMonth(Date date, int month) {
        Calendar c = getCalendar(date);
        c.add(Calendar.MONTH, month);
        return c.getTime();
    }
    //_end

    //_start 日期的日加减操作
    /**
     * 日期的日加减操作
     * @param date 被操作的日期
     * @param day 增加的日(负数表示减)
     * @return 日加减后的日期
     */
    public static Date addDay(Date date, int day) {
        Calendar c = getCalendar(date);
        c.add(Calendar.DAY_OF_MONTH, day);
        return c.getTime();
    }
    //_end

    //_start 日期的时加减操作
    /**
     * 日期的时加减操作
     * @param date 被操作的日期
     * @param hour 增加的时(负数表示减)
     * @return 时加减后的日期
     */
    public static Date addHour(Date date, int hour) {
        Calendar c = getCalendar(date);
        c.add(Calendar.HOUR_OF_DAY, hour);
        return c.getTime();
    }
    //_end

    //_start 日期的分加减操作
    /**
     * 日期的分加减操作
     * @param date 被操作的日期
     * @param minute 增加的分(负数表示减)
     * @return 分加减后的日期
     */
    public static Date addMinute(Date date, int minute) {
        Calendar c = getCalendar(date);
        c.add(Calendar.MINUTE, minute);
        return c.getTime();
    }
    //_end

    //_start 日期的秒加减操作
    /**
     * 日期的秒加减操作
     * @param date 被操作的日期
     * @param second 增加的秒(负数表示减)
     * @return 秒加减后的日期
     */
    public static Date addSecond(Date date, int second) {
        Calendar c = getCalendar(date);
        c.add(Calendar.SECOND, second);
        return c.getTime();
    }
    //_end

    //_start 日期的星期加减操作
    /**
     * 日期的星期加减操作
     * @param date 被操作的日期
     * @param week 增加的星期(负数表示减)
     * @return 星期加减后的日期
     */
    public static Date addWeek(Date date, int week) {
        Calendar c = getCalendar(date);
        c.add(Calendar.DAY_OF_WEEK, week);
        return c.getTime();
    }
    //_end

    //_start 验证日期允许的最小日期
    /**
     * 验证日期允许的最小日期
     * @param date 被校验的日期
     * @param minDate 允许的最小日期(日期字符串会自动换号为日期)
     * @return 验证成功返回true,否则返回false
     */
    public static boolean MinDate(Date date,String minDate){
        return date.compareTo(toDate(minDate))>=0;
    }
    //_end


    //_start 验证日期允许的最大日期
    /**
     * 验证日期允许的最大日期
     * @param date 被校验的日期
     * @param maxDate 允许的最大日期(日期字符串会自动换号为日期)
     * @return 验证成功返回true,否则返回false
     */
    public static boolean MaxDate(Date date,String maxDate){
        return date.compareTo(toDate(maxDate))<=0;
    }
    //_end

    //_start 验证日期允许日期范围
    /**
     * 验证日期允许日期范围
     * @param date 被校验的日期
     * @param minDate 允许的最小日期(日期字符串会自动换号为日期)
     * @param maxDate 允许的最大日期(日期字符串会自动换号为日期)
     * @return 验证成功返回true,否则返回false
     */
    public static boolean RangeDate(Date date,String minDate,String maxDate){
        return MinDate(date, minDate)&&MaxDate(date, maxDate);
    }
    //_end

}

猜你喜欢

转载自blog.csdn.net/u013087359/article/details/81108320