日期處理類DateUtils 【org.apache.commons.lang3.time.DateUtils】
阿新 • • 發佈:2018-11-02
lang3官方版本
Maven依賴
本文以3.7版本為例:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
DateUtils 常用API
// 將字串轉化為日期型別 Date date = DateUtils.parseDate("2018-10-20", "yyyy-MM-dd"); // 第二個引數設定為負數代表日期向前幾天 // 日期向後加5天 2018-10-20 --》 2018-10-25 Date date1 = DateUtils.addDays(date, 5); // 判斷是否是同一天 boolean isSame = DateUtils.isSameDay(date, date1);
這裡只舉例幾個常用API,其他API可以參考下文
DateUtils API解析
/** * 以秒為標準時間的毫秒數 */ public static final long MILLIS_PER_SECOND = 1000 /** *以分鐘為標準時間的毫秒數 */ public static final long MILLIS_PER_MINUTE = 60000L; /** *以小時為標準時間的毫秒數 */ public static final long MILLIS_PER_HOUR = 3600000L; /** * 以天為標準時間的毫秒數 */ public static final long MILLIS_PER_DAY = 86400000L; /** * 這個型別是半個月, 所以這可以代表日期是上還是下半個月 。 */ public static final int SEMI_MONTH = 1001 private static final int[][] fields = new int[][]{{14}, {13}, {12}, {11, 10}, {5, 5, 9}, {2, 1001}, {1}, {0}}; /** * 周範圍, 從星期日開始 。 */ public static final int RANGE_WEEK_SUNDAY = 1 /** * 周範圍,從星期一開始 。 */ public static final int RANGE_WEEK_MONDAY = 2 /** * 周範圍,從關注的那天開始。 */ public static final int RANGE_WEEK_RELATIVE = 3 /** * 周範圍,以關注的天為中心。 */ public static final int RANGE_WEEK_CENTER = 4 /** * 月範圍,從星期日開始 。 */ public static final int RANGE_MONTH_SUNDAY = 5 /** * 月範圍,從星期一開始 。 */ public static final int RANGE_MONTH_MONDAY = 6 /** * 不應在標準編成構造獲取實列, 而應該直接使用類中的靜態方法,如:DateUtils.parseDate(str) 。 * 此建構函式意在允許需要一個javabeen實列的工具中使用 。 */ public DateUtils() /** * 判斷兩個日期時間是否是同一天 。 * * @param date1 第一個日期,不可修改,非null * @param date2 第二個日期,不可修改,非null */ public static boolean isSameDay(final Date date1, final Date date2) /** * 判斷兩個日曆時間是否是同一天 。 * * @param cal1 第一個日曆,不可修改,非null * @param cal2 第二個日曆,不可修改,非null */ public static boolean isSameDay(final Calendar cal1, final Calendar cal2) /** * 判斷兩個日期是否相同 * 這種方法比較兩個物件的毫秒時間 * * @param date1 第一個日期,不可修改,非null * @param date2 第二個日期,不可修改,非null */ public static boolean isSameInstant(final Date date1, final Date date2) /** * 判斷兩個日曆是否相同 * 這種方法比較兩個物件的毫秒時間 * * @param cal1 第一個日曆,不可修改,非null * @param cal2 第二個日曆,不可修改,非null */ public static boolean isSameInstant(final Calendar cal1, final Calendar cal2) /** * 判斷兩個日曆本地時間是否相同 * 除了比較數值外兩個日曆物件的型別還要相同 * * @param cal1 第一個日曆,不可修改,非null * @param cal2 第二個日曆,不可修改,非null */ public static boolean isSameLocalTime(final Calendar cal1, final Calendar cal2) /** * 嘗試用parsePatterns中各種不同的日期格式解析代表時間的字串str 。 * * 解析時會逐個使用parsePatterns中的格式,如果都沒有匹配上, 則丟擲異常ParseException 。 * * @param str 被解析的時間字串,非null * @param parsePatterns 用於解析str的時間格式,有一個或幾個,非null */ public static Date parseDate(final String str, final String... parsePatterns) throws ParseException /** * 嘗試用parsePatterns中各種不同的日期格式解析代表時間的字串str 。 * 解析時會使用給定的日期格式符locale 。 * * 解析時會逐個使用parsePatterns中的格式,如果都沒有匹配上, 則丟擲異常ParseException 。 * * @param str 被解析的時間字串,非null * @param locale 使用locale中的日期格式符,如果為null,則使用系統預設的locale * @param parsePatterns 用於解析str的時間格式,有一個或幾個,非null */ public static Date parseDate(final String str, final Locale locale, final String... parsePatterns) throws ParseException /** * 嘗試用parsePatterns中各種不同的日期格式解析代表時間的字串str 。 * * 解析時會逐個使用parsePatterns中的格式,如果都沒有匹配上, 則丟擲異常ParseException 。 * 解析器解析嚴格不允許的日期, 如:"February 942, 1996" 。 * * @param str 被解析的時間字串,非null * @param parsePatterns 用於解析str的時間格式,有一個或幾個,非null */ public static Date parseDateStrictly(final String str, final String... parsePatterns) throws ParseException /** * 嘗試用parsePatterns中各種不同的日期格式解析代表時間的字串str 。 * 解析時會使用給定的日期格式符locale 。 * * 解析時會逐個使用parsePatterns中的格式,如果都沒有匹配上, 則丟擲異常ParseException 。 * 解析器解析嚴格不允許的日期, 如:"February 942, 1996" 。 * * @param str 被解析的時間字串,非null * @param locale 使用locale中的日期格式符,如果為null,則使用系統預設的locale * @param parsePatterns 用於解析str的時間格式,有一個或幾個,非null */ public static Date parseDateStrictly(final String str, final Locale locale, final String... parsePatterns) throws ParseException /** * 在日期date上增加amount年 。 * * @param date 處理的日期,非null * @param amount 要加的年數,可能為負數 */ public static Date addYears(final Date date, final int amount) /** * 在日期date上增加amount月 。 * * @param date 處理的日期,非null * @param amount 要加的月數,可能為負數 */ public static Date addMonths(final Date date, final int amount) /** * 在日期date上增加amount周 。 * * @param date 處理的日期,非null * @param amount 要加的週數,可能為負數 */ public static Date addWeeks(final Date date, final int amount) /** * 在日期date上增加amount天 。 * * @param date 處理的日期,非null * @param amount 要加的天數,可能為負數 */ public static Date addDays(final Date date, final int amount) /** * 在日期date上增加amount小時 。 * * @param date 處理的日期,非null * @param amount 要加的小時數,可能為負數 */ public static Date addHours(final Date date, final int amount) /** * 在日期date上增加amount分鐘 。 * * @param date 處理的日期,非null * @param amount 要加的分鐘數,可能為負數 */ public static Date addMinutes(final Date date, final int amount) /** * 在日期date上增加amount秒 。 * * @param date 處理的日期,非null * @param amount 要加的秒數,可能為負數 */ public static Date addSeconds(final Date date, final int amount) /** * 在日期date上增加amount 毫秒 。 * * @param date 處理的日期,非null * @param amount 要加的毫秒數,可能為負數 */ public static Date addMilliseconds(final Date date, final int amount) /** * 給日期data設定一個新的年份 。 * * @param date 處理的日期,非null * @param amount 要設定的年份 */ public static Date setYears(final Date date, final int amount) /** * 給日期data設定一個新的月份 。 * * @param date 處理的日期,非null * @param amount 要設定的月份 */ public static Date setMonths(final Date date, final int amount) /** * 給日期data設定一個新的天 。 * * @param date 處理的日期,非null * @param amount 要設定的天 */ public static Date setDays(final Date date, final int amount) /** * 給日期data設定一個新的小時 。 * * @param date 處理的日期,非null * @param amount 要設定的小時 */ public static Date setHours(final Date date, final int amount) /** * 給日期data設定一個新的分鐘 。 * * @param date 處理的日期,非null * @param amount 要設定的分鐘 */ public static Date setMinutes(final Date date, final int amount) /** * 給日期data設定一個新的秒 。 * * @param date 處理的日期,非null * @param amount 要設定的秒 */ public static Date setSeconds(final Date date, final int amount) /** * 給日期data設定一個新的毫秒 。 * * @param date 處理的日期,非null * @param amount 要設定的毫秒 */ public static Date setMilliseconds(final Date date, final int amount) /** * 將一個日期放到日曆中 。 */ public static Calendar toCalendar(final Date date) /** * 根據閾值field四捨五入日曆date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 April 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date round(final Date date, final int field) /** * 根據閾值field四捨五入日曆date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 April 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Calendar round(final Calendar date, final int field) /** * 根據閾值field四捨五入日曆date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 April 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date round(final Object date, final int field) /** * 根據閾值field擷取日期date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 13:00:00.000; * 如果field為MONTH,它將返回 1 Mar 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date truncate(final Date date, final int field) /** * 根據閾值field擷取日曆date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 13:00:00.000; * 如果field為MONTH,它將返回 1 Mar 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Calendar truncate(final Calendar date, final int field) /** * 根據閾值field擷取日期date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 13:00:00.000; * 如果field為MONTH,它將返回 1 Mar 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date truncate(final Object date, final int field) /** * 根據閾值field向上舍入日期date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 Apr 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date ceiling(final Date date, final int field) /** * 根據閾值field向上舍入日期date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 Apr 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Calendar ceiling(final Calendar date, final int field) /** * 根據閾值field向上舍入日期date 。 * * 例如, 如果你的時間是 28 Mar 2002 13:45:01.231, * 如果field為HOUR,它將返回 28 Mar 2002 14:00:00.000; * 如果field為MONTH,它將返回 1 Apr 2002 0:00:00.000 。 * * @param date 處理的日期,非null * @param field 閾值 */ public static Date ceiling(final Object date, final int field) /** * 根據指定的時間focus和範圍型別rangeStyle構建一個時間範圍迭代器 。 * * 如傳入的時間是Thursday, July 4, 2002,範圍型別是RANGE_MONTH_SUNDAY, * 則返回迭代器的範圍是從Sunday, June 30, 2002 到 Saturday, August 3, 2002 * * @param focus 指定的時間 * @param rangeStyle 範圍型別,值必須是如下之一: * DateUtils.RANGE_MONTH_SUNDAY, * DateUtils.RANGE_MONTH_MONDAY, * DateUtils.RANGE_WEEK_SUNDAY, * DateUtils.RANGE_WEEK_MONDAY, * DateUtils.RANGE_WEEK_RELATIVE, * DateUtils.RANGE_WEEK_CENTER */ public static Iterator<Calendar> iterator(final Date focus, final int rangeStyle) /** * 根據指定的時間focus和範圍型別rangeStyle構建一個時間範圍迭代器 。 * * 如傳入的時間是Thursday, July 4, 2002,範圍型別是RANGE_MONTH_SUNDAY, * 則返回迭代器的範圍是從Sunday, June 30, 2002 到 Saturday, August 3, 2002 * * @param focus 指定的時間 * @param rangeStyle 範圍型別,值必須是如下之一: * DateUtils.RANGE_MONTH_SUNDAY, * DateUtils.RANGE_MONTH_MONDAY, * DateUtils.RANGE_WEEK_SUNDAY, * DateUtils.RANGE_WEEK_MONDAY, * DateUtils.RANGE_WEEK_RELATIVE, * DateUtils.RANGE_WEEK_CENTER */ public static Iterator<Calendar> iterator(final Calendar focus, final int rangeStyle) /** * 根據指定的時間focus和範圍型別rangeStyle構建一個時間範圍迭代器 。 * * 如傳入的時間是Thursday, July 4, 2002,範圍型別是RANGE_MONTH_SUNDAY, * 則返回迭代器的範圍是從Sunday, June 30, 2002 到 Saturday, August 3, 2002 * * @param focus 指定的時間 * @param rangeStyle 範圍型別,值必須是iterator(Calendar, int)方法註釋中列出的 */ public static Iterator<?> iterator(final Object focus, final int rangeStyle) /** * 返回指定分段內的毫秒數 。 所有大於分段的DateFields將被忽略 。 * * 請求任何日期毫秒,將返回當前秒的毫秒數 (返回一個數字在0和999之間) 。 * 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、 * Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、 * Calendar.SECOND 和 Calendar.MILLISECOND * 分段值小於或等於MILLISECOND,將返回0 。 * * January 1, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538 * January 6, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538 * January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10538 * January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0 * (a millisecond cannot be split in milliseconds) * * @param calendar 獲取值得日曆物件,非null * @param fragment 分段值 */ public static long getFragmentInMilliseconds(final Calendar calendar, final int fragment) /** * 返回指定分段內的秒數 。 所有大於分段的DateFields將被忽略 。 * * 請求任何日期秒,將返回當前的分鐘的秒數 (返回一個數字在0和59之間) 。 * 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、 * Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、 * Calendar.SECOND 和 Calendar.MILLISECOND * 分段值小於或等於SECOND,將返回0 。 * * January 1, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10 * January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10 * January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 26110 * (7*3600 + 15*60 + 10)</li> * January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0 * * @param calendar 獲取值得日曆物件,非null * @param fragment 分段值 */ public static long getFragmentInSeconds(final Calendar calendar, final int fragment) /** * 返回指定分段內的分鐘數 。 所有大於分段的DateFields將被忽略 。 * * 請求任何日期分鐘,將返回當前的小時的分鐘數 (返回一個數字在0和59之間) * 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、 * Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、 * Calendar.SECOND 和 Calendar.MILLISECOND * 分段值小於或等於MINUTE,將返回0 。 * * January 1, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15 * January 6, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15 * January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 15 * January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 435 (7*60 + 15) * January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0 * * @param calendar 獲取值得日曆物件,非null * @param fragment 分段值 */ public static long getFragmentInMinutes(final Calendar calendar, final int fragment) /** * 返回指定分段內的小時數 。 所有大於分段的DateFields將被忽略 。 * * 請求任何日期小時,將返回當前的天的小時數 (返回一個數字在0和23之間) 。 * 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、 * Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、 * Calendar.SECOND 和 Calendar.MILLISECOND * 分段值小於或等於HOUR_OF_DAY,將返回0 。 * * January 1, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7 * January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7 * January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 7 * January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 127 (5*24 + 7) * January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0 * * @param calendar 獲取值得日曆物件,非null * @param fragment 分段值 */ public static long getFragmentInHours(final Calendar calendar, final int fragment) /** * 返回指定分段內的天數 。 所有大於分段的DateFields將被忽略 。 * * 請求任何日期天數,將返回當前的月的天數 (返回一個數字在1和31之間) 。 * 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、 * Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、 * Calendar.SECOND 和 Calendar.MILLISECOND * 分段值小於或等於DATE,將返回0 。 * * January 28, 2008 with Calendar.MONTH as fragment will return 28 * February 28, 2008 with Calendar.MONTH as fragment will return 28 * January 28, 2008 with Calendar.YEAR as fragment will return 28 * February 28, 2008 with Calendar.YEAR as fragment will return 59 * January 28, 2008 with Calendar.MILLISECOND as fragment will return 0 * * @param calendar 獲取值得日曆物件,非null * @param fragment 分段值 */ public static long getFragmentInDays(final Calendar calendar, final int fragment) /** * 擷取比較兩個日曆物件的field處的值是否相同 。 * * @param cal1 第一個日曆物件,非null * @param cal2 第二個日曆物件,非null * @param field Calendar中的閾值 */ public static boolean truncatedEquals(final Calendar cal1, final Calendar cal2, final int field) /** * 擷取比較兩個日期物件的field處的值是否相同 。 * * @param date1 第一個日期物件,非null * @param date2 第二個日期物件,非null * @param field Calendar中的閾值 */ public static boolean truncatedEquals(final Date date1, final Date date2, final int field) /** * 擷取比較兩個日曆物件的field處的值 。 * 如果第一個日曆小於、等於、大於第二個,則對應返回負整數、0、正整數 * * @param cal1 第一個日曆物件,非null * @param cal2 第二個日曆物件,非null * @param field Calendar中的閾值 */ public static int truncatedCompareTo(final Calendar cal1, final Calendar cal2, final int field) /** * 擷取比較斷兩個日期物件的field處的值 。 * 如果第一個日期小於、等於、大於第二個,則對應返回負整數、0、正整數 * * @param date1 第一個日期物件,非null * @param date2 第二個日期物件,非null * @param field Calendar中的閾值 */ public static int truncatedCompareTo(final Date date1, final Date date2, final int field)