日期工具类

来源:互联网 发布:矩阵的模的计算公式 编辑:程序博客网 时间:2024/06/08 09:11

在编写薪水支付系统时有判断日期的需求,因此对java中涉及到日期的相关类进行总结。

java.util.Date
其中大多数方法已废弃,由Caledar以及DateFormat代替。

java.util.Caledar
实现日期与时间字段之间的转化

java.text.DateFormate
格式化、解析日期字符串

这里写图片描述

表示形式

年:y-1900
月:0-11表示,0表示1月
日:1-31表示
时:0-23表示
分:0-59表示
秒:0-61表示;(60、61涉及闰秒时表示)

日期工具类

package implement.util;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;/** *  日期工具类 * 1. * Created by ZD on 2017/11/28. */public class DatesUtil {    //默认日期格式    public static final String DATE_DEFAULT_FORMAT = "yyyy-MM-dd";    //默认日期时间格式    public static final String DATETIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";    //默认时间格式    public static final String TIME_DEFAULT_FORMAT = "HH:mm:ss";    //日期格式化    private static DateFormat dateFormat = null;    //日期时间格式化    private static DateFormat datetimeFormat = null;    //时间格式化    private static DateFormat timeFormat = null;    private static Calendar calendar = null;    /**     * 初始化     */    static{        dateFormat = new SimpleDateFormat(DATE_DEFAULT_FORMAT);        datetimeFormat = new SimpleDateFormat(DATETIME_DEFAULT_FORMAT);        timeFormat = new SimpleDateFormat(TIME_DEFAULT_FORMAT);        calendar = new GregorianCalendar();    }    /**     * 日期格式化 yyyy-MM-dd     * @param date     * @return     */    public static String getDateFormat(Date date){        return dateFormat.format(date);    }    /**     * 日期时间格式化 yyyy-MM-dd HH:mm:ss     * @param date     * @return     */    public static String getDateTimeFormat(Date date){        return datetimeFormat.format(date);    }    /**     * 时间格式化 HH:mm:ss     * @param date     * @return     */    public static String getTimeFormat(Date date){        return timeFormat.format(date);    }    /**     * 日期格式化     * @param date     * @return     */    public static Date getDateFormat(String date){        try {            return dateFormat.parse(date);        } catch (ParseException e) {            e.printStackTrace();        }        return null;    }    /**     * 日期时间格式化     * @param date     * @return     */    public static Date getDateTimeFormat(String date){        try {            return datetimeFormat.parse(date);        } catch (ParseException e) {            e.printStackTrace();        }        return null;    }    /**     * 时间格式化     * @param date     * @return     */    public static Date getTimeFormat(String date){        try {            return timeFormat.parse(date);        } catch (ParseException e) {            e.printStackTrace();        }        return null;    }    /**     * 获取当前日期     * @return     */    public static Date getDate(){        return DatesUtil.getDateFormat(dateFormat.format(new Date()));    }    /**     * 获取当前日期星期一日期     * @return     */    public static Date getFirstDayOfWeek(){        calendar.setFirstDayOfWeek(Calendar.MONDAY);        calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek());        return calendar.getTime();    }    /**     * 获取当前日期星期日日期     * @return     */    public static Date getLastDayOfWeek(){        calendar.setFirstDayOfWeek(Calendar.MONDAY);        calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()+6);        return calendar.getTime();    }    /**     * 获取指定日期中的星期一日期     * @param date     * @return     */    public static Date getFirstDayOfWeek(Date date){        if (date == null)            return null;        calendar.setFirstDayOfWeek(Calendar.MONDAY);        calendar.setTime(date);        calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek());        return calendar.getTime();    }    /**     * 获取给定日期所在星期的星期日日期     * @param date     * @return     */    public static Date getLastDayOfWeek(Date date){        if (date == null)            return null;        calendar.setFirstDayOfWeek(Calendar.MONDAY);        calendar.setTime(date);        calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()+6);        return calendar.getTime();    }    /**     * 获取当前月第一天日期     * @return     */    public static Date getFirstDayOfMonth(){        calendar.set(Calendar.DAY_OF_MONTH,1);        return calendar.getTime();    }    /**     * 获取当前月的最后一天     * @return     */    public static Date getLastDayOfMonth(){        calendar.set(Calendar.DAY_OF_MONTH,1);        calendar.add(Calendar.MONTH,1);        calendar.add(Calendar.DAY_OF_MONTH,-1);        return calendar.getTime();    }    /**     * 获取指定月的第一天     * @param date     * @return     */    public static Date getFirstDayOfMonth(Date date){        if (date == null)            return null;        calendar.setTime(date);        calendar.set(Calendar.DAY_OF_MONTH,1);        return calendar.getTime();    }    /**     * 返回指定日期所在月的最后一天     * @param date     * @return     */    public static Date getLastDayOfMonth(Date date){        if (date == null)            return null;        calendar.setTime(date);        calendar.set(Calendar.DAY_OF_MONTH,1);        calendar.add(Calendar.MONTH,1);        calendar.add(Calendar.DAY_OF_MONTH,-1);        return calendar.getTime();    }    /**     * 获取日期前一天     * @param date     * @return     */    public static Date getForwardDay(Date date){        if (date == null)            return null;        calendar.setTime(date);        calendar.add(Calendar.DATE,-1);        return calendar.getTime();    }    /**     * 获取日期后一天     * @param date     * @return     */    public static Date getNextDay(Date date){        if (date == null)            return null;        calendar.setTime(date);        calendar.add(Calendar.DATE,1);        return calendar.getTime();    }    /**     * 获取当前年份     * @return     */    public static int getNowYear(){        Calendar calendar = Calendar.getInstance();        return calendar.get(Calendar.YEAR);    }    /**     * 获取当前月份     * @return     */    public static int getNowMonth(){        Calendar calendar = Calendar.getInstance();        return calendar.get(Calendar.MONTH)+1;    }    /**     * 获取当前日期     * @return     */    public static int getNowDay(){        Calendar calendar = Calendar.getInstance();        return calendar.get(Calendar.DATE);    }    /**     * 获取当前星期     * @return     */    public static String getNowWeek(){        Calendar calendar = Calendar.getInstance();        int week = calendar.get(Calendar.DAY_OF_WEEK);        return "星期"+(week-1);    }    /**     * 获取当月天数     * @return     */    public static int getMonthDay(){        Calendar calendar = Calendar.getInstance();        return calendar.getActualMaximum(Calendar.DATE);    }    /**     * 获取指定月天数     * @param date     * @return     */    public static int getMonthDay(Date date){        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        return calendar.getActualMaximum(Calendar.DATE);    }    /**     * 获取时间段中的每一天     * @param startDate     * @param endDate     * @return     */    public static List<Date> getEveryDayInDate(Date startDate, Date endDate){        if (startDate == null || endDate == null)            return null;        List<Date> dates = new ArrayList<Date>();        Calendar calendar = Calendar.getInstance();        calendar.setTime(startDate);        dates.add(calendar.getTime());        while (calendar.getTime().compareTo(endDate) < 0){            calendar.add(Calendar.DAY_OF_MONTH,1);            dates.add(calendar.getTime());        }        return dates;    }    /**     * 判定指定日期是不是周末     * @param date     * @return     */    public static boolean isWeekend(Date date){        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        int day = calendar.get(Calendar.DAY_OF_WEEK);        if (day == 7 || day == 1)            return true;        return false;    }    public static void main(String[] args){        System.out.println("日期格式化:"+DatesUtil.getDateFormat(new Date()));        System.out.println("日期时间格式化:"+DatesUtil.getDateTimeFormat(new Date()));        System.out.println("时间格式化:"+DatesUtil.getTimeFormat(new Date()));        System.out.println("获取当前日期:"+DatesUtil.getDate());        System.out.println("获取当前星期中星期一日期:"+DatesUtil.getFirstDayOfWeek());        System.out.println("获取当前星期中星期日日期:"+DatesUtil.getLastDayOfWeek());        System.out.println("获取指定日期所在星期的星期一日期:"+DatesUtil.getFirstDayOfWeek(DatesUtil.getDateFormat("2017-11-10")));        System.out.println("获取指定日期所在星期的星期日日期:"+DatesUtil.getLastDayOfWeek(DatesUtil.getDateFormat("2017-11-23")));        System.out.println("获取当前月中第一天日期:"+DatesUtil.getFirstDayOfMonth());        System.out.println("获取当前月中最后一天日期:"+DatesUtil.getLastDayOfMonth());        System.out.println("获取指定月的第一天日期:"+DatesUtil.getFirstDayOfMonth(DatesUtil.getDateFormat("2017-10-23")));        System.out.println("获取指定月的最后一天日期:"+DatesUtil.getLastDayOfMonth(DatesUtil.getDateFormat("2017-02-04")));        System.out.println("获取日期前一天:"+DatesUtil.getForwardDay(DatesUtil.getDateFormat("2017-03-12")));        System.out.println("获取日期后一天:"+DatesUtil.getNextDay(DatesUtil.getDateFormat("2017-05-14")));        System.out.println("获取当前年份:"+DatesUtil.getNowYear());        System.out.println("获取当前月份:"+DatesUtil.getNowMonth());        System.out.println("获取当前日期:"+DatesUtil.getNowDay());        System.out.println("获取当前星期:"+DatesUtil.getNowWeek());        System.out.println("获取当月天数:"+DatesUtil.getMonthDay());        System.out.println("获取指定月天数:"+DatesUtil.getMonthDay(DatesUtil.getDateFormat("2017-02-11")));        List<Date> dates = DatesUtil.getEveryDayInDate(DatesUtil.getDateFormat("2017-10-11"),DatesUtil.getDateFormat("2017-11-01"));        for (Date date:dates){            System.out.println("获取时间段的每一天:"+DatesUtil.getDateFormat(date));        }        System.out.println("判断某天是不是周末:"+DatesUtil.isWeekend(DatesUtil.getDateFormat("2017-11-27")));    }}

TimeStamp相关

package implement.util;import java.sql.Timestamp;/** * 与Date有关的瘦包装器,允许将JDBC API将该类标识为sql timestamp值。 * * Created by ZD on 2017/11/27. */public class TimeStampDesc {    public static void main(String[] args){        /**         * new Timestamp(long time)         * 使用毫秒数值来构造Timestamp对象         */        Timestamp timestamp = new Timestamp(1511792658089L);        Timestamp timestamp1 = new Timestamp(1511792658090L);        /**         * after(Timestamp ts)         * before(Timestamp ts)         * 判定此timestamp对象是否晚于/早于指定的timestamp对象         */        System.out.println("after():"+timestamp.after(timestamp1));        System.out.println("bofore():"+timestamp.before(timestamp1));        /**         * compareTo(Timestamp ts)         * 将此timestamp对象与给定timestamp对象进行比较         */        int compareTo = timestamp.compareTo(timestamp1);        System.out.println("compareTo()"+compareTo);        /**         * getTime()         * 返回自1970年1月1日00:00:00GMT以来的毫秒数         */        System.out.println("getNanos:"+timestamp1.getNanos());        System.out.println("getTime:"+timestamp1.getTime());    }}

Date相关

package implement.util;import java.util.*;/** * Calendar类功能描述 * * Created by ZD on 2017/11/22. */public class CalendarDesc {    public static void main(String[] args){        GregorianCalendar gregorianCalendar = new GregorianCalendar();        /**         * add(int field,int amout)         * 为给定日历添加或减去指定的时间量         */        System.out.println("before add Calendar.MONTH:"+gregorianCalendar.get(Calendar.MONTH));//        gregorianCalendar.add(Calendar.MONTH,-5);//        System.out.println("after add Calendar.MONTH:"+gregorianCalendar.get(Calendar.MONTH));        /**         * roll(int field,boolean up)         * 在给定时间字段上添加或减去单个时间单元,         */        gregorianCalendar.roll(Calendar.MONTH,true);        System.out.println("after roll up Calendar.Month:"+gregorianCalendar.get(Calendar.MONTH));        gregorianCalendar.roll(Calendar.MONTH,false);        System.out.println("after roll down Calendar.Month:"+gregorianCalendar.get(Calendar.MONTH));        /**         * roll(int field,int amount)         * 指定日历字段添加指定数量的值         */        System.out.println("before roll Calendar.Year:"+gregorianCalendar.get(Calendar.YEAR));//        gregorianCalendar.roll(Calendar.YEAR,3);//        System.out.println("after roll Calendar.Year:"+gregorianCalendar.get(Calendar.YEAR));        /**         * 获得时区         */        System.out.println("get timezone:"+gregorianCalendar.getTimeZone());        /**         * 判断日期时间解释是否宽松         * 如果宽松,类似可将32解释成下个月1号         * 如果不宽松,上序情况会报异常         */        System.out.println("is lenient"+gregorianCalendar.isLenient());        /**         *setLenient(boolean lenient)设置是否宽松         */        gregorianCalendar.setLenient(true);        /**         * setFirstDayOfWeek(int value)         * getFirstDayOfWeek()         * 设置/获取一星期的第一天是哪一天         */        System.out.println("before setFirstDayOfWeek:"+gregorianCalendar.getFirstDayOfWeek());//        gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);//        System.out.println("after setFirstDayOfWeek:"+gregorianCalendar.getFirstDayOfWeek());        /**         * getMinimalDaysInFirstWeek()         * setMinimalDaysInFirstWeek(int value)         * 设置/获取一年中第一个星期所需最少天数         */        System.out.println("before setMinimalDaysInFirstWeek:"+gregorianCalendar.getMinimalDaysInFirstWeek());//        gregorianCalendar.setMinimalDaysInFirstWeek(7);//        System.out.println("after setMinimalDaysInFirstWeek:"+gregorianCalendar.getMinimalDaysInFirstWeek());        /**         * getMinmum(int field)         * 返回Calendar实例给定日历字段的最小值         */        System.out.println("getMinimum:"+gregorianCalendar.getMinimum(Calendar.YEAR));        /**         * getMaximum(int field)         * 返回Calendar实例给定日历字段的最大值         */        System.out.println("getMaximum:"+gregorianCalendar.getMaximum(Calendar.DATE));        /**         * getGreatestMinimum(int field)         * 返回Calendar实例给定日历字段的最高的最小值         */        System.out.println("getGreatestMinimum:"+gregorianCalendar.getGreatestMinimum(Calendar.DATE));        /**         * getLeastMaximum(int field)         * 返回Calendar实例给定日历字段的最低的最大值         */        System.out.println("getLeastMaximum:"+gregorianCalendar.getLeastMaximum(Calendar.DATE));        /**         * getActualMinimum(int field)         * getActualMaximum(int field)         * 返回指定日历字段可能拥有的最小/大值         */        System.out.println("getActualMinimum:"+gregorianCalendar.getActualMinimum(Calendar.MONTH));        System.out.println("getActualMaximum:"+gregorianCalendar.getActualMaximum(Calendar.DATE));        /**         * after(Object when)         * before(Object when)         * 根据Calendar白搜狐IDE时间是否在指定Object表示的时间之后/之前         */        GregorianCalendar gregorianCalendar1 = new GregorianCalendar(2017,11,23);        System.out.println("after():"+gregorianCalendar.after(gregorianCalendar1));        System.out.println("before():"+gregorianCalendar.before(gregorianCalendar1));        /**         * clear()         * clear(int field)         * 将日历字段值或时间值全/某一字段设置为未定义         *///       gregorianCalendar.clear(Calendar.YEAR);//        gregorianCalendar.clear();//        System.out.println("clear()"+gregorianCalendar.get(Calendar.YEAR));//       System.out.println("clear(int field)"+gregorianCalendar.get(Calendar.YEAR));        /**         * getTime()         * getTimeInMills()         * 返回date对象         */        System.out.println("getTime():"+gregorianCalendar.getTime());        System.out.println("getTimeInMills():"+gregorianCalendar.getTimeInMillis());        /**         * isLeapYear(int year)         * 判断给定年份是否为闰年         */        System.out.println("isLeapYear():"+gregorianCalendar.isLeapYear(gregorianCalendar.get(Calendar.YEAR)));    }}

DateFormat相关

package implement.util;import java.text.DateFormat;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.*;import static java.text.DateFormat.*;import static java.text.DateFormat.FULL;import static java.text.DateFormat.LONG;/** * Created by ZD on 2017/11/22. */public class DateFormatDesc {    /**     * 测试     * @param args     */    public static void main(String[] args){        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();        Date date = new Date(2017-1900,11-1,26);        /**         * format(Date date)         * 将一个Date格式化为日期/时间字符串         */        String dates = simpleDateFormat.format(date);        System.out.println("format():"+date);        /**         *format(Date date,StringBuffer toAppendTo,FiledPosotion fieldPostion)         * 将一个Date格式化为日期/时间字符串,输出到字符缓冲区         */        /*SimpleDateFormat simpleDateFormat = new SimpleDateFormat();        StringBuffer stringBuffer = simpleDateFormat.format(new Date(2017,11,30),new StringBuffer(), null);*/        /**         * getAvailableLocals()         * 返回所有语言环境的数组         */        Locale[] locales = DateFormat.getAvailableLocales();        for (Locale locale:locales){            System.out.print("local:"+locale.getCountry()+",");        }        System.out.println();        /**         * getCalendar(),获取与此日期/时间格式关联的日历         */        Calendar calendar = simpleDateFormat.getCalendar();        System.out.println("calendar:"+calendar.getTime());        /**         * getDateInstance()         * 获取日期格式器,默认语言环境的默认格式风格         */        DateFormat dateFormat1 = DateFormat.getDateInstance();        String format1 = dateFormat1.format(date);        System.out.println("默认格式风格:"+format1);        /**         * getDateInstance(int dateStyle),给定格式风格         */        DateFormat dateFormat2 = DateFormat.getDateInstance(SHORT);        String format2 = dateFormat2.format(date);        System.out.println("设置为short风格:"+format2);        DateFormat dateFormat3 = DateFormat.getDateInstance(MEDIUM);        String format3 = dateFormat3.format(date);        System.out.println("设置为MEDIUM风格:"+format3);        DateFormat dateFormat4 = DateFormat.getDateInstance(LONG);        String format4 = dateFormat4.format(date);        System.out.println("设置为LONG风格:"+format4);        DateFormat dateFormat5 = DateFormat.getDateInstance(FULL);        String format5 = dateFormat5.format(date);        System.out.println("设置为FULL风格:"+format5);        /**         * getDateInstance(int dateStyle,Locale locale)         * 给定语言,给定风格,格式化日期         */        DateFormat dateFormat6 = DateFormat.getDateInstance(FULL,Locale.ENGLISH);        String format6 = dateFormat6.format(date);        System.out.println("设置为FULL风格,语言环境为English:"+format6);        /**         * getDateTimeInstance()         * 在默认语言、默认风格,格式化日期时间         */        DateFormat dateFormat7 = DateFormat.getDateTimeInstance();        String format7 = dateFormat7.format(new Date());        System.out.println("默认语言、默认风格下的日期时间格式器:"+format7);        /**         * getDateTimeInstance(int dateStyle,int timeStyle)         * 给定日期风格、时间风格下的日期时间格式器         * dateStyle、timeStyle下各有四种风格         */        DateFormat dateFormat8 = DateFormat.getDateTimeInstance(LONG,SHORT);        String format8 = dateFormat8.format(new Date());        System.out.println("给定日期风格,时间风格下的日期时间格式器:"+format8);        /**         * getDateTimeInstance(int dateStyle,int timeStyle,Locale locale)         * 给定日期风格、时间风格、所处语言环境下的日期时间格式器         */        DateFormat dateFormat9 = DateFormat.getDateTimeInstance(FULL,LONG,Locale.ENGLISH);        String format9 = dateFormat9.format(new Date());        System.out.println("给定日期风格,时间风格以及所处语言环境下的日期时间格式器:"+format9);        /**         *setCalendar()设置日历         * getCalendar()获取日历         * 使用的默认语言环境下默认日历         */        simpleDateFormat.setCalendar(new GregorianCalendar());        Calendar calendar1 = simpleDateFormat.getCalendar();        System.out.println("获取日历:"+calendar1.getTime());        /**         * setNumberFormat(),NumberFormat数值格式         * getNumberFormat()         */        simpleDateFormat.setNumberFormat(new DecimalFormat());        NumberFormat numberFormat = simpleDateFormat.getNumberFormat();        long number = 20171126;        System.out.println("获取numberFormat:"+numberFormat.format(number));        /**         * getTimeZone()设定时区         */        TimeZone timeZone = simpleDateFormat.getTimeZone();        System.out.println("timeZone:"+timeZone.getDisplayName());        /**         * isLenient()判断日期/时间解析是否严格         */        boolean islenient = simpleDateFormat.isLenient();        System.out.println("解析是否严格:"+islenient);    }}
原创粉丝点击