1.增加Excel常用日期格式
詳見: https://my.oschina.net/xkzhangsan/blog/4288589
2.自定義時區格式化方法
3.自動解析方法,根據字符串特點自動識別解析,smartParse*,支持下面格式:
* =====================yyyy-MM-dd 相關=====================
* yyyy-MM-dd 2020-05-23 或 2020-5-23
* yyyyMMdd 20200523
* yyyy/MM/dd 2020/05/23 或 2020/5/23
* yyyy年MM月dd日 2020年05月23日 或 2020年5月23日
* yyyy.MM.dd 2020.05.23 或 2020.5.23
*
*
* =====================yyyy-MM-dd HH🇲🇲ss 相關=====================
* yyyy-MM-dd HH🇲🇲ss 2020-05-23 17:06:30
* yyyyMMddHHmmss 20200523170630
* yyyy年MM月dd日 HH🇲🇲ss 2020年05月23日 17:06:30
* yyyy年MM月dd日 HH時mm分ss秒 2020年05月23日 17時06分30秒
* yyyy-MM-dd HH:mm 2020-05-23 17:06
* yyyy/MM/dd HH:mm 2020/05/23 17:06
*
*
* =====================yyyy-MM-dd HH🇲🇲ss.SSS 相關=====================
* yyyy-MM-dd HH🇲🇲ss.SSS 2020-05-23 17:06:30.272
* yyyyMMddHHmmssSSS 20200523170630272
*
* =====================Iso相關格式=====================
* yyyy-MM-dd'T'HH🇲🇲ssZ 2020-05-23T17:06:30+0800
* yyyy-MM-dd'T'HH🇲🇲ss'Z' 2020-05-23T17:06:30Z
* yyyy-MM-dd'T'HH🇲🇲ssxxx 2020-05-23T17:06:30+08:00
* yyyy-MM-dd'T'HH🇲🇲ss.SSSZ 2020-05-23T17:06:30.272+0800
* yyyy-MM-dd'T'HH🇲🇲ss.SSSxxx 2020-05-23T17:06:30.272+08:00
* =====================其他相關格式=====================
* EEE MMM dd HH🇲🇲ss zzz yyyy Sat May 23 17:06:30 CST 2020
4.ISO格式(包含T)自動解析方法,根據字符串特點自動識別解析,parseIso*,支持下面格式:
* =====================Iso相關格式=====================
* yyyy-MM-dd'T'HH🇲🇲ssZ 2020-05-23T17:06:30+0800
* yyyy-MM-dd'T'HH🇲🇲ss'Z' 2020-05-23T17:06:30Z
* yyyy-MM-dd'T'HH🇲🇲ssxxx 2020-05-23T17:06:30+08:00
* yyyy-MM-dd'T'HH🇲🇲ss.SSSZ 2020-05-23T17:06:30.272+0800
* yyyy-MM-dd'T'HH🇲🇲ss.SSSxxx 2020-05-23T17:06:30.272+08:00
5.解析時間戳方法, parseEpochMilli*
6.解析Date默認格式EEE MMM dd HH🇲🇲ss zzz yyyy,如Sat May 23 17:06:30 CST 2020,parseDateDefaultStr*
7.代碼優化
xk-time is a datetime converter calculator formatter calendar and cron expression tool set, based on java8 date and time API, thread safe, easy to use.
時間轉換,計算,格式化,解析,日曆和cron表達式等的工具,使用java8,線程安全,簡單易用,多達20幾種常用日期格式化模板。
xk-time工具包,使用java8 api,其中Instant、LocalDate、LocalDateTime、LocalTime、ZonedDateTime等都是線程安全的類,而且增加了更豐富的方法,在此基礎上開發相關工具類,線程安全,讓使用更方便。
xk-time工具包,將上面功能按照時間轉換,時間計算,時間格式化解析分成3個工具類:DateTimeConverterUtil,DateTimeCalculatorUtil,DateTimeFormatterUtil,每個類只做一個種功能,方便使用。
<dependency> <groupId>com.github.xkzhangsan</groupId> <artifactId>xk-time</artifactId> <version>1.1.0</version> </dependency>
包含Date、LocalDate、LocalDateTime、LocalTime、Instant、ZonedDateTime、YearMonth和Timestamp的互相轉換
注意,ZonedDateTime相關的轉換,尤其是其他時間轉ZonedDateTime,要注意時間和對應時區一致。
詳細使用可以查看相關測試代碼。
包括:
(1)獲取時間屬性方法,get* 比如getYear(Date date) 獲取年部分,getMonthCnLong(Date date)獲取月份中文,getDayOfWeekCn(Date date),獲取星期中文。
(2)獲取時間加操作方法,plus* 比如plusYears(Date date, long amountToAdd) 當前時間年增加amountToAdd值。
(3)獲取時間減操作方法,minus* 比如minusYears(Date date, long amountToSubtract) 當前時間年減少amountToSubtract值。
(4)獲取時間修改屬性方法,with* 比如withYear(Date date, long newValue) 修改當前時間年值為newValue。
(5)獲取比較2個時間方法,between* 比如betweenYears(Date startInclusive, Date endExclusive) 比較2個時間,獲取年部分。
(6)其他常用方法,比如isLeapYear(Date date) 判斷是否閏年,isWeekend(Date date) 判斷是否周末,isExpiry(String yearMonthStr) 是否過期等
(7)時區轉換計算方法,transform*,比如transform(ZonedDateTime zonedDateTime, String zoneId)
(8)比較2個時間大小和相等方法,compare*,比如compare(Date date1, Date date2)
(9)獲取準確的起始時間方法,start*,end*,比如startTimeOfMonth() 當月起始時間 當月第一天日期+00:00:00,endTimeOfMonth() 當月最後一天日期+23:59:59。
(10)相同月日比較判斷方法,isSameMonthDay*,betweenNextSameMonthDay*,nextSameMonthDay*, 比如用於生日,節日等周期性的日期比較判斷。
(11)星座計算方法,getConstellation*,比如getConstellationNameCn(String monthDayStr),根據日期計算星座。
(12)計算指定年月或起始時間區間的時間列表,getList, 比如getDateList(int year, int month),計算指定年月的時間列表。
(13)減少時間精度方法,reduceAccuracyTo, 比如reduceAccuracyToDay(Date date),減少時間精度到天,其他補0,返回如,2020-04-23 00:00:00。
(14)獲取時間戳方法,getEpoch*, 比如getEpochMilli()獲取時間戳,getEpochMilliFormat()獲取時間戳格式化字符串(yyyy-MM-dd HH🇲🇲ss)
詳細使用可以查看相關測試代碼。
包含常用日期格式如:
yyyy-MM-dd
HH🇲🇲ss
yyyy-MM-dd HH🇲🇲ss
yyyy-MM-dd'T'HH🇲🇲ssZ等等
(1)格式化方法, format*, 比如formatToDateStr(Date date) 格式化,返回日期部分,如:yyyy-MM-dd;
format(Date date, DateTimeFormatter formatter) formatter 可以選擇已定義好的formatter比如YYYY_MM_DD_HH_MM_SS_FMT(yyyy-MM-dd HH🇲🇲ss)格式化日期。
(2)解析方法, parse*, 比如parseDateStrToDate(String text) 解析日期yyyy-MM-dd,返回Date;
parseToDate(String text, DateTimeFormatter formatter) 根據 formatter解析為 Date。
(3)自動解析方法,根據字符串特點自動識別解析,smartParse*,比如smartParseToDate(String text) 自動解析Date。
(4)ISO格式(包含T)自動解析方法,根據字符串特點自動識別解析,parseIso*,比如parseIsoToDate(String text) 自動解析Date。
(5)解析時間戳方法, parseEpochMilli*, 比如parseEpochMilliToDate(String text),解析時間戳為Date,如 1590224790000。
(6)解析Date默認格式,parseDateDefaultStr*,比如parseDateDefaultStrToDate(String text)
解析 EEE MMM dd HH🇲🇲ss zzz yyyy 比如: Sat May 23 17:06:30 CST 2020 為Date。
(7)自定義時區格式化方法,比如 format(Date date, DateTimeFormatter formatter, String zoneId),根據zoneId格式化Date。
注意:格式化和解析與系統時區不同的時間時,使用自定義時區格式化方法,或可以使用withZone方法重新設置時區,比如:
YYYY_MM_DD_HH_MM_SS_SSS_FMT.withZone(ZoneId.of("Europe/Paris") 。
詳細使用可以查看相關測試代碼。
包括:
(1)生成指定時間的日曆(包含年、月和日層級關係的日曆)方法,generateCalendar* 比如generateCalendar(int year, int month) 生成指定年月的日曆。
(2)生成指定時間的日曆(包含年、月和日層級關係的日曆),包含農曆和所有節假日信息方法,generateCalendarWithHoliday*, 比generateCalendarWithHoliday(int year, int month, Map<String, String> localHolidayMap,Map<String, String> chineseHolidayMap, Map<String, Integer> dateTypeMap)生成指定年月的日曆,包含農曆和所有節假日信息,可以自定義節假日和工作日等。
詳細使用可以查看相關測試代碼。
包含:
(1)農曆日期年月日計算。
(2)農曆歲次,生肖屬相計算。
(3)二十四節氣計算等
注意: 僅支持公曆1901-1950年的農曆轉換。
農曆和二十四節氣計算的準確依賴於lunarInfo和solarTermInfo基礎數據的準確性和精確度。
根據測試結果,發現本程序和常用萬年曆基本一致,常用萬年曆軟體中也有很少量計算誤差,歡迎提出問題,會不斷進行改進和修正。
詳細使用可以查看相關測試代碼。
包含:
(1)公曆節假日計算, getLocalHoliday* 比如getLocalHoliday(Date date) 計算date的公曆節日,getLocalHoliday(Date date, Map<String, String> localHolidayMap) 可以傳入自定義公曆節日數據。
(2)農曆節假日計算, getChineseHoliday* 比如getChineseHoliday(Date date) 計算date的農曆節日,getChineseHoliday(Date date, Map<String, String> chineseHolidayMap) 可以傳入自定義農曆節日數據。
(3)二十四節氣計算, getSolarTerm* 比如getSolarTerm(Date date) 計算date的二十四節氣。
注意: 農曆和二十四節氣使用農曆日期類 LunarDate,僅支持公曆1901-1950年的計算。
詳細使用可以查看相關測試代碼。
cron表達式從左到右(用空格隔開):秒(0-59) 分(0-59) 小時(0-23) 日期(1-31) 月份(1-12的整數或者 JAN-DEC) 星期(1-7的整數或者 SUN-SAT (1=SUN)) 年份(可選,1970-2099)
所有欄位均可使用特殊字符:, - * / 分別是枚舉,範圍,任意,間隔
日期另外可使用:? L W 分別是任意,最後,有效工作日(周一到周五)
星期另外可使用:? L # 分別是任意,最後,每個月第幾個星期幾
常用cron表達式:
(1)0 0 2 1 * ? * 表示在每月的1日的凌晨2點觸發
(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15執行作業
(3)0 15 10 ? * 6L 2002-2006 表示2002-2006年的每個月的最後一個星期五上午10:15執行作
(4)0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
(5)0 15 10 L * ? 每月最後一日的上午10:15觸發
(6)0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發
包含
(1)驗證和格式化Cron表達式方法,isValidExpression和formatExpression。
(2)生成下一個或多個執行時間方法,getNextTime和getNextTimeList。
(3)生成下一個或多個執行時間的日期格式化(yyyy-MM-dd HH🇲🇲ss)方法,getNextTimeStr和getNextTimeStrList。
(4)對比Cron表達式下一個執行時間是否與指定date相等方法,isSatisfiedBy。
注意: 底層使用 quartz的CronExpression處理。
詳細使用可以查看相關測試代碼。
(1)fork項目。
(2)在dev分支修改。
(3)提交pull request。