xk-time 1.1.0 發布,Java 時間工具包,增加模糊解析日期功能

2020-12-15 開源中國

xk-time 1.1.0 發布了,更新如下:

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

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幾種常用日期格式化模板。

0.為什麼要開發這個工具?

(1)java8以前的Date API設計不太好,使用不方便,往往會有線程安全問題。

xk-time工具包,使用java8 api,其中Instant、LocalDate、LocalDateTime、LocalTime、ZonedDateTime等都是線程安全的類,而且增加了更豐富的方法,在此基礎上開發相關工具類,線程安全,讓使用更方便。

(2)常見的DateUtil,往往將時間轉換,計算,格式化,解析等功能都放在同一個類中,導致類功能複雜,方法太多,查找不方便。

xk-time工具包,將上面功能按照時間轉換,時間計算,時間格式化解析分成3個工具類:DateTimeConverterUtil,DateTimeCalculatorUtil,DateTimeFormatterUtil,每個類只做一個種功能,方便使用。

(3)為了將與時間緊密相關的節假日、農曆、二十四節氣、十二星座和日曆等功能集中起來開發成工具,方便使用。

1.Maven 坐標

<dependency> <groupId>com.github.xkzhangsan</groupId> <artifactId>xk-time</artifactId> <version>1.1.0</version> </dependency>

2.日期轉換工具類 DateTimeConverterUtil

包含Date、LocalDate、LocalDateTime、LocalTime、Instant、ZonedDateTime、YearMonth和Timestamp的互相轉換
注意,ZonedDateTime相關的轉換,尤其是其他時間轉ZonedDateTime,要注意時間和對應時區一致。

詳細使用可以查看相關測試代碼。

3.日期計算工具類 DateTimeCalculatorUtil

包括:
(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)

詳細使用可以查看相關測試代碼。

4.日期格式化和解析工具類 DateTimeFormatterUtil

包含常用日期格式如:
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") 。

詳細使用可以查看相關測試代碼。

5.日曆工具類 CalendarUtil

包括:
(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)生成指定年月的日曆,包含農曆和所有節假日信息,可以自定義節假日和工作日等。

詳細使用可以查看相關測試代碼。

6.農曆日期類 LunarDate

包含:
(1)農曆日期年月日計算。
(2)農曆歲次,生肖屬相計算。
(3)二十四節氣計算等
注意: 僅支持公曆1901-1950年的農曆轉換。
農曆和二十四節氣計算的準確依賴於lunarInfo和solarTermInfo基礎數據的準確性和精確度。
根據測試結果,發現本程序和常用萬年曆基本一致,常用萬年曆軟體中也有很少量計算誤差,歡迎提出問題,會不斷進行改進和修正。

詳細使用可以查看相關測試代碼。

7.節假日計算類 Holiday

包含:
(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年的計算。

詳細使用可以查看相關測試代碼。

8.Cron表達式工具類 CronExpressionUtil

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.提bug和建議

2.貢獻代碼

(1)fork項目。
(2)在dev分支修改。
(3)提交pull request。

相關焦點

  • Java 時間工具包 xk-time 3.0.1 發布,中國工作日計算問題修復
    xk-time 3.0.1 已經發布 ,更新如下:1.時間自然語言分析工具類(NLP) TimeNLPUtil。
  • 非常強大的java時間處理工具類!
    xk-time 是時間轉換,時間計算,時間格式化,時間解析,日曆,時間cron表達式和時間NLP等的工具,使用Java8,線程安全,簡單易用,多達70幾種常用日期格式化模板,支持Java8時間類和Date,輕量級,無第三方依賴。為什麼要開發這個工具?(1)Java8以前的Date API設計不太好,使用不方便,往往會有線程安全問題。
  • smart-doc 1.8.5 發布,Java 零註解文檔生成工具
    如果你不喜歡其他工具強侵入的註解汙染,smart-doc給你一個不錯的選擇!喜歡smart-doc的用戶也不要忘記給項目star,你們的支持是smart-doc持續推進的動力。功能特性 零註解、零學習成本、只需要寫標準java注釋。 基於原始碼接口定義自動推導,強大的返回結構推導。
  • JAVA8——JAVA成長之路
    4.3 Date/Time API (JSR 310)Java 8通過發布新的Date-Time API (JSR 310)來進一步加強對日期與時間的處理。對日期與時間的操作一直是Java程式設計師最痛苦的地方之一。
  • jBeanBox 4.0.0 發布,微形 Java IOC/AOP 工具
    jBeanBox是一個微形但功能較齊全的IOC/AOP工具,它本身的核心源碼只有約3000行,jBeanBox兼容主要的JSR330
  • java中 時間如何計算 - CSDN
    在本教程中,我們向您展示2個示例來計算Java中的日期/時間差: 手動時間計算。 喬達時間圖書館。 1.手動時間計算 轉換Date (毫秒),並使用以下規則計算兩個日期之間的差: 1000 milliseconds = 1
  • 程序猿不要在寫日期轉換工具了,萬能代碼片段直接拿走使用
    作為開發者,每個開發項目中一定有很多的工具類,而其中百分之六七十就有一個DateUtils工具。每次都要寫日期格式,yyyyMMdd。每個項目項目中使用的日期格式都不一樣。終於有一天,一堆程序猿受不了了。於是把所有的日期格式都寫完。放到一個工具裡。使用就完了。文尾提供代碼。歡迎收藏使用。
  • Apache Pulsar 2.6.1 版本正式發布:功能增強,新增 OAuth2 支持
    2.6.1 版本正式發布!Apache Pulsar 2.6.1 修復了 2.6.0 版本中的諸多問題,改進了一些功能,新增了對 OAuth2 的支持,覆蓋 Broker、Pulsar SQL、Pulsar Functions、Go Function
  • 雲日曆電腦版 1.20 重磅發布!全新毛玻璃透明界面、全新圖標……
    雲日曆Windows版 1.20 極速版登場!全新界面、全新圖標、全面適配高分屏/觸控螢幕/Windows10……一小時前發布的雲日曆 iOS 版 1.13 還是老的圖標和藍色,而現在「搶先」 發布的雲日曆電腦版 1.20 則帶著新圖標新界面隆重登場。
  • Java開發手冊認證考試的50題
    C .次版本號:保持相對兼容性,增加主要功能特性,影響範圍極小的API不兼容修改。D .修訂號:保持完全兼容性,修復BUG、新增次要功能特性等。簡單解析P38【強制】二方庫版本號命名方式:主版本號.次版本號.修訂號1)主版本號:產品方向改變,或者大規模 API 不兼容,或者架構不兼容升級。
  • 雲日曆電腦版 1.21 發布!炫酷毛玻璃天氣頁面+15處改進
    雲日曆 Windows版 1.21 極速版再次更新!上個版本1.20開始,雲日曆電腦版引入了全新界面、全新圖標、全面適配高分屏/觸控螢幕/Windows10……還加入了雲日曆App 掃描登錄,全新日期/天氣二合一卡片,日曆組篩選功能,秒表工具,倒計時工具,萬年曆窗口雙擊日期創建日程……不慚愧的說是好評如潮。
  • JPress 0.2.3 發布,WordPress 的 Java 代替版
    JPress 0.2.3 版本發布了,此版本主要是修復bug,增強穩定性,同時完善module,非常方便的二次開發。
  • 這款Java工具類庫簡直棒級了
    這幾天在微信公眾號看到有號主推薦一個Java工具類庫,當時沒有在意,覺得已經有Java的common包了,還有Guava類庫,已經夠用了。但是今天又來看了一遍,覺得這個類庫別有一番風味。Hutool中的工具方法來自於每個用戶的精雕細琢,它涵蓋了Java開發底層代碼中的方方面面,它既是大型項目開發中解決小問題的利器,也是小型項目中的效率擔當;Hutool是項目中"util"包友好的替代,它節省了開發人員對項目中公用類和公用工具方法的封裝時間,使開發專注於業務,同時可以最大限度的避免封裝不完善帶來的bug。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    1. JVM相關(包括了各個版本的特性)對於剛剛接觸Java的人來說,JVM相關的知識不一定需要理解很深,對此裡面的概念有一些簡單的了解即可。不過對於一個有著3年以上Java經驗的資深開發者來說,不會JVM幾乎是不可接受的。JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。
  • 俠說java8-LocalDateTime等時間使用手冊(全),先mark後看
    前言java8的時間日期api給我們提供了極大的便利。如何更好的熟悉使用時間api也是學習java8的一個很重要的知識點,下面我們一起來學習學習。本篇文章代碼比較多,可以作為工具,需要使用時,再來查閱。目錄1.普通Date時間如何轉為LocalDateTime?
  • 雲日曆電腦版 1.22 發布!黃曆詳情頁、夏令時轉換、閃退修復等
    > - 卡片頂部問候語未刷新的問題修正:功能 - 模糊窗口下編輯框顯示透明的問題改進:功能 - 我的日程卡片,當用戶切換萬年曆的日期的時候,紀念日倒數日顯示距離選中日期的天數雲日曆 PC版 v1.21 更新日誌
  • Java 生成隨機數的 5 種方式,你知道幾種?
    1. Math.random() 靜態方法 產生的隨機數是 0 - 1 之間的一個 ,即 。 什麼情況下隨機數的生成線程不安全: 線程1在第一次調用 時產生一個生成器 ,使用當前時間作為種子。 線程2在第一次調用 時產生一個生成器 ,使用當前時間作為種子。
  • 雲日曆電腦版 1.23 發布:增日程管理、提醒音播放設置、初一凸顯等
    >卡片頂部問候語未刷新的問題修正:功能 - 模糊窗口下編輯框顯示透明的問題改進:功能 - 我的日程卡片,當用戶切換萬年曆的日期的時候,紀念日倒數日顯示距離選中日期的天數雲日曆 PC版 v1.21 更新日誌
  • java生成隨機數的五種方法
    什麼情況下隨機數的生成線程不安全:線程1在第一次調用 random() 時產生一個生成器 generator1,使用當前時間作為種子。線程2在第一次調用 random() 時產生一個生成器 generator2,使用當前時間作為種子。
  • ActFramework 1.8.32 發布 - 高質量的 Java Web 應用框架
    Act-Morphia 1.9.0Act-morphia 是轉為 ActFramework 應用程式設計的 MongoDB 訪問庫. v1.9.0 帶來的改進有:4.1 Dao.update API 改進:下面的情況如果 firstName 為 null, 則會調用 mongodb 的 $unset