{"id":161681,"date":"2020-09-18T20:25:47","date_gmt":"2020-09-18T12:25:47","guid":{"rendered":"http:\/\/4563.org\/?p=161681"},"modified":"2020-09-18T20:25:47","modified_gmt":"2020-09-18T12:25:47","slug":"xk-time-java-%e6%97%b6%e9%97%b4%e5%b7%a5%e5%85%b7%e5%8c%85","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=161681","title":{"rendered":"xk-time Java \u65f6\u95f4\u5de5\u5177\u5305"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  xk-time Java \u65f6\u95f4\u5de5\u5177\u5305               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : xkzhangsan <\/span>  <span><i><\/i> 2<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<h3>xk-time \u662f\u65f6\u95f4\u8f6c\u6362\uff0c\u8ba1\u7b97\uff0c\u683c\u5f0f\u5316\uff0c\u89e3\u6790\uff0c\u65e5\u5386\u548c cron \u8868\u8fbe\u5f0f\u7b49\u7684\u5de5\u5177\uff0c\u4f7f\u7528 Java8\uff0c\u7ebf\u7a0b\u5b89\u5168\uff0c\u7b80\u5355\u6613\u7528\uff0c\u591a\u8fbe 70 \u51e0\u79cd\u5e38\u7528\u65e5\u671f\u683c\u5f0f\u5316\u6a21\u677f\uff0c\u652f\u6301 Java8 \u65f6\u95f4\u7c7b\u548c Date\uff0c\u8f7b\u91cf\u7ea7\uff0c\u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56\u3002<\/h3>\n<p>xk-time is a tool for time conversion, calculation, formatting, parsing, calendar and cron expression, etc., using Java8, thread-safe, easy to use, up to 70 commonly used date formatting templates, support Java8 time class and Date , Lightweight, no third party dependence.<\/p>\n<h2>\u5b89\u88c5\u9879\u76ee<\/h2>\n<h4>\uff08 1 \uff09 Maven<\/h4>\n<pre><code>&lt;dependency&gt;     &lt;groupId&gt;com.github.xkzhangsan&lt;\/groupId&gt;       &lt;artifactId&gt;xk-time&lt;\/artifactId&gt;          &lt;version&gt;2.1.2&lt;\/version&gt;     &lt;\/dependency&gt;     <\/code><\/pre>\n<h4>\uff08 2 \uff09 Gradle<\/h4>\n<pre><code>compile group: 'com.github.xkzhangsan', name: 'xk-time', version: '2.1.2'   <\/code><\/pre>\n<h4>\u6ce8\u610f\uff1aAndroid \u8c28\u614e\u4f7f\u7528\uff0cAndroid \u7aef\u56e0\u4e3a\u9700\u8981\u517c\u5bb9\u4f4e\u7248\u672c\u800c\u4e0d\u652f\u6301 Java8\uff0c\u5efa\u8bae\u7ee7\u7eed\u4f7f\u7528\u5176\u4ed6\u5de5\u5177\uff0c\u5982\u679c\u6709\u9700\u8981\u672c\u9879\u76ee\u76f8\u5173\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u53c2\u8003\u6e90\u7801\u5b9e\u73b0\uff0c\u6216\u7559\u8a00\u7ed9\u6211\u3002\u611f\u8c22\u652f\u6301\uff01<\/h4>\n<h2>\u4e3a\u4ec0\u4e48\u8981\u5f00\u53d1\u8fd9\u4e2a\u5de5\u5177\uff1f<\/h2>\n<h4>\uff08 1 \uff09 java8 \u4ee5\u524d\u7684 Date API \u8bbe\u8ba1\u4e0d\u592a\u597d\uff0c\u4f7f\u7528\u4e0d\u65b9\u4fbf\uff0c\u5f80\u5f80\u4f1a\u6709\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u3002<\/h4>\n<p>xk-time \u5de5\u5177\u5305\uff0c\u4f7f\u7528 java8 api\uff0c\u5176\u4e2d Instant \u3001LocalDate \u3001LocalDateTime \u3001LocalTime \u3001ZonedDateTime \u7b49\u90fd\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u7c7b\uff0c\u800c\u4e14\u589e\u52a0\u4e86\u66f4\u4e30\u5bcc\u7684\u65b9\u6cd5\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u5f00\u53d1\u76f8\u5173\u5de5\u5177\u7c7b\uff0c\u7ebf\u7a0b\u5b89\u5168\uff0c\u8ba9\u4f7f\u7528\u66f4\u65b9\u4fbf\u3002<\/p>\n<h4>\uff08 2 \uff09\u5e38\u89c1\u7684 DateUtil\uff0c\u5f80\u5f80\u5c06\u65f6\u95f4\u8f6c\u6362\uff0c\u8ba1\u7b97\uff0c\u683c\u5f0f\u5316\uff0c\u89e3\u6790\u7b49\u529f\u80fd\u90fd\u653e\u5728\u540c\u4e00\u4e2a\u7c7b\u4e2d\uff0c\u5bfc\u81f4\u7c7b\u529f\u80fd\u590d\u6742\uff0c\u65b9\u6cd5\u592a\u591a\uff0c\u67e5\u627e\u4e0d\u65b9\u4fbf\u3002<\/h4>\n<p>xk-time \u5de5\u5177\u5305\uff0c\u5c06\u4e0a\u9762\u529f\u80fd\u6309\u7167\u65f6\u95f4\u8f6c\u6362\uff0c\u65f6\u95f4\u8ba1\u7b97\uff0c\u65f6\u95f4\u683c\u5f0f\u5316\u89e3\u6790\u5206\u6210 3 \u4e2a\u5de5\u5177\u7c7b\uff1aDateTimeConverterUtil\uff0cDateTimeCalculatorUtil\uff0cDateTimeFormatterUtil\uff0c\u6bcf\u4e2a\u7c7b\u53ea\u505a\u4e00\u4e2a\u79cd\u529f\u80fd\uff0c\u65b9\u4fbf\u4f7f\u7528\u3002<\/p>\n<h4>\uff08 3 \uff09\u4e3a\u4e86\u5c06\u4e0e\u65f6\u95f4\u7d27\u5bc6\u76f8\u5173\u7684\u8282\u5047\u65e5\u3001\u519c\u5386\u3001\u4e8c\u5341\u56db\u8282\u6c14\u3001\u5341\u4e8c\u661f\u5ea7\u3001\u5341\u4e8c\u751f\u8096\u3001\u5341\u4e8c\u65f6\u8fb0\u548c\u65e5\u5386\u7b49\u529f\u80fd\u96c6\u4e2d\u8d77\u6765\u5f00\u53d1\u6210\u5de5\u5177\uff0c\u65b9\u4fbf\u4f7f\u7528\u3002<\/h4>\n<h2>1.\u65e5\u671f\u8f6c\u6362\u5de5\u5177\u7c7b DateTimeConverterUtil<\/h2>\n<p>\u5305\u542b Date \u3001LocalDate \u3001LocalDateTime \u3001LocalTime \u3001Instant \u3001ZonedDateTime \u3001YearMonth \u3001Timestamp \u548c long \u7b49\u4e92\u76f8\u8f6c\u6362<br \/> \u6ce8\u610f\uff0cZonedDateTime \u76f8\u5173\u7684\u8f6c\u6362\uff0c\u5c24\u5176\u662f\u5176\u4ed6\u65f6\u95f4\u8f6c ZonedDateTime\uff0c\u8981\u6ce8\u610f\u65f6\u95f4\u548c\u5bf9\u5e94\u65f6\u533a\u4e00\u81f4\u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>2.\u65e5\u671f\u8ba1\u7b97\u5de5\u5177\u7c7b DateTimeCalculatorUtil<\/h2>\n<p>\u5305\u62ec\uff1a<br \/> \uff08 1 \uff09\u83b7\u53d6\u65f6\u95f4\u5c5e\u6027\u65b9\u6cd5\uff08\u652f\u6301\u5e74\u6708\u65e5\u65f6\u5206\u79d2\u6beb\u79d2\uff0c\u661f\u671f\uff0c\u65f6\u95f4\u6233\u7b49\uff09\uff0cget* \u6bd4\u5982 getYear(Date date) \u83b7\u53d6\u5e74\u90e8\u5206\uff0cgetMonthCnLong(Date date)\u83b7\u53d6\u6708\u4efd\u4e2d\u6587\uff0cgetDayOfWeekCn(Date date)\uff0c\u83b7\u53d6\u661f\u671f\u4e2d\u6587\u3002<\/p>\n<p>\uff08 2 \uff09\u83b7\u53d6\u65f6\u95f4\u52a0\u64cd\u4f5c\u65b9\u6cd5\uff0cplus* \u6bd4\u5982 plusYears(Date date, long amountToAdd) \u5f53\u524d\u65f6\u95f4\u5e74\u589e\u52a0 amountToAdd \u503c\u3002<\/p>\n<p>\uff08 3 \uff09\u83b7\u53d6\u65f6\u95f4\u51cf\u64cd\u4f5c\u65b9\u6cd5\uff0cminus* \u6bd4\u5982 minusYears(Date date, long amountToSubtract) \u5f53\u524d\u65f6\u95f4\u5e74\u51cf\u5c11 amountToSubtract \u503c\u3002<\/p>\n<p>\uff08 4 \uff09\u83b7\u53d6\u65f6\u95f4\u4fee\u6539\u5c5e\u6027\u65b9\u6cd5\uff0cwith* \u6bd4\u5982 withYear(Date date, long newValue) \u4fee\u6539\u5f53\u524d\u65f6\u95f4\u5e74\u503c\u4e3a newValue \u3002<\/p>\n<p>\uff08 5 \uff09\u83b7\u53d6\u6bd4\u8f83 2 \u4e2a\u65f6\u95f4\u65b9\u6cd5\uff0cbetween* \u6bd4\u5982 betweenYears(Date startInclusive, Date endExclusive) \u6bd4\u8f83 2 \u4e2a\u65f6\u95f4\uff0c\u83b7\u53d6\u5e74\u90e8\u5206\u3002<\/p>\n<p>\uff08 6 \uff09\u5176\u4ed6\u5e38\u7528\u65b9\u6cd5\uff0c\u6bd4\u5982 isLeapYear(Date date) \u5224\u65ad\u662f\u5426\u95f0\u5e74\uff0cisWeekend(Date date) \u5224\u65ad\u662f\u5426\u5468\u672b\uff0cisExpiry(String yearMonthStr) \u662f\u5426\u8fc7\u671f\u7b49<\/p>\n<p>\uff08 7 \uff09\u65f6\u533a\u8f6c\u6362\u8ba1\u7b97\u65b9\u6cd5\uff0ctransform*\uff0c\u6bd4\u5982 transform(ZonedDateTime zonedDateTime, String zoneId)<\/p>\n<p>\uff08 8 \uff09\u6bd4\u8f83 2 \u4e2a\u65f6\u95f4\u5927\u5c0f\u548c\u76f8\u7b49\u65b9\u6cd5\uff0ccompare*\uff0c\u6bd4\u5982 compare(Date date1, Date date2)<\/p>\n<p>\uff08 9 \uff09\u83b7\u53d6\u51c6\u786e\u7684\u8d77\u59cb\u65f6\u95f4\u65b9\u6cd5\uff0cstart*,end*\uff0c\u6bd4\u5982 startTimeOfMonth() \u5f53\u6708\u8d77\u59cb\u65f6\u95f4 \u5f53\u6708\u7b2c\u4e00\u5929\u65e5\u671f+00:00:00\uff0cendTimeOfMonth() \u5f53\u6708\u6700\u540e\u4e00\u5929\u65e5\u671f+23:59:59 \u3002<\/p>\n<p>\uff08 10 \uff09\u76f8\u540c\u6708\u65e5\u6bd4\u8f83\u5224\u65ad\u65b9\u6cd5\uff0cisSameMonthDay*\uff0cbetweenNextSameMonthDay*\uff0cnextSameMonthDay*\uff0c \u6bd4\u5982\u7528\u4e8e\u751f\u65e5\uff0c\u8282\u65e5\u7b49\u5468\u671f\u6027\u7684\u65e5\u671f\u6bd4\u8f83\u5224\u65ad\u3002<\/p>\n<p>\uff08 11 \uff09\u661f\u5ea7\u8ba1\u7b97\u65b9\u6cd5\uff0cgetConstellation*\uff0c\u6bd4\u5982 getConstellationNameCn(String monthDayStr)\uff0c\u6839\u636e\u65e5\u671f\u8ba1\u7b97\u661f\u5ea7\u3002<\/p>\n<p>\uff08 12 \uff09\u8ba1\u7b97\u6307\u5b9a\u5e74\u6708\u6216\u8d77\u59cb\u65f6\u95f4\u533a\u95f4\u7684\u65f6\u95f4\u5217\u8868\uff0cget*List\uff0c \u6bd4\u5982 getDateList(int year, int month)\uff0c\u8ba1\u7b97\u6307\u5b9a\u5e74\u6708\u7684\u65f6\u95f4\u5217\u8868\u3002<\/p>\n<p>\uff08 13 \uff09\u51cf\u5c11\u65f6\u95f4\u7cbe\u5ea6\u65b9\u6cd5\uff0creduceAccuracyTo*\uff0c \u6bd4\u5982 reduceAccuracyToDay(Date date)\uff0c\u51cf\u5c11\u65f6\u95f4\u7cbe\u5ea6\u5230\u5929\uff0c\u5176\u4ed6\u8865 0\uff0c\u8fd4\u56de\u5982\uff0c2020-04-23 00:00:00 \u3002<\/p>\n<p>\uff08 14 \uff09\u83b7\u53d6\u65f6\u95f4\u6233\u65b9\u6cd5\uff0cgetEpoch*\uff0c \u6bd4\u5982 getEpochMilli()\u83b7\u53d6\u65f6\u95f4\u6233\uff0cgetEpochMilliFormat()\u83b7\u53d6\u65f6\u95f4\u6233\u683c\u5f0f\u5316\u5b57\u7b26\u4e32\uff08 yyyy-MM-dd HH:mm:ss \uff09<\/p>\n<p>\uff08 15 \uff09\u8ba1\u7b97\u5e74\u9f84\u65b9\u6cd5\uff0cgetAge*\uff0c \u6bd4\u5982 getAge(Date birthDay)\uff0c\u901a\u8fc7\u751f\u65e5\u8ba1\u7b97\u5e74\u9f84\u3002<\/p>\n<p>\uff08 16 \uff09\u5224\u65ad\u662f\u5426\u5230\u751f\u65e5\u65b9\u6cd5\uff0cisBirthDay*\uff0c \u6bd4\u5982 isBirthDay(Date birthDay)\uff0c\u6839\u636e\u751f\u65e5\u5224\u65ad\u5f53\u524d\u65e5\u671f\u662f\u5426\u5230\u751f\u65e5\u3002<\/p>\n<p>\uff08 17 \uff09\u5468\u6570\u8ba1\u7b97\u65b9\u6cd5\uff0cweekof*\uff0c \u6bd4\u5982 weekOfMonth(Date date)\uff0c\u65e5\u671f\u6240\u5728\u6708\u4e2d\u7b2c\u51e0\u5468\u3002<\/p>\n<p>\uff08 18 \uff09\u5224\u65ad\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e94\u65b9\u6cd5\uff0cisMonday*,isZhouYi*\uff0c \u6bd4\u5982 isZhouYi(Date date)\uff0c\u662f\u5426\u4e3a\u5468\u4e00\u3002<\/p>\n<p>\uff08 19 \uff09\u5341\u4e8c\u65f6\u8fb0\u8ba1\u7b97\u65b9\u6cd5\uff0cgetTwelveTwo*\uff0c \u6bd4\u5982 getTwelveTwo(Date date)\uff0c\u83b7\u53d6\u6307\u5b9a\u65f6\u95f4\u5bf9\u5e94\u7684\u5341\u4e8c\u65f6\u8fb0\u3002<\/p>\n<p>\uff08 20 \uff09\u5b63\u5ea6\u8ba1\u7b97\u65b9\u6cd5\uff0cgetQuarter*\uff0c \u6bd4\u5982 getQuarter(Date date)\uff0c\u83b7\u53d6\u6307\u5b9a\u65f6\u95f4\u5bf9\u5e94\u7684\u5b63\u5ea6<\/p>\n<p>\uff08 21 \uff09\u83b7\u53d6\u5b63\u5ea6\u51c6\u786e\u7684\u8d77\u59cb\u65f6\u95f4\u65b9\u6cd5\uff08\u56db\u4e2a\u5b63\u5ea6\uff09\uff0cstartTimeOf*Quarter\uff0c \u6bd4\u5982 startTimeOfFirstQuarter(int year)\uff0c\u83b7\u53d6\u6307\u5b9a\u5e74\u7684\u7b2c\u4e00\u5b63\u5ea6<\/p>\n<p>\uff08 22 \uff09 \u83b7\u53d6\u5e74\u51c6\u786e\u7684\u8d77\u59cb\u65f6\u95f4\u65b9\u6cd5\uff0cstartTimeOfYear\uff0c \u6bd4\u5982 startTimeOfYear(int year)\uff0c\u83b7\u53d6\u6307\u5b9a\u5e74\u7684\u5f00\u59cb\u65f6\u95f4<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>3.\u65e5\u671f\u683c\u5f0f\u5316\u548c\u89e3\u6790\u5de5\u5177\u7c7b DateTimeFormatterUtil<\/h2>\n<p>\u5305\u542b\u5e38\u7528\u65e5\u671f\u683c\u5f0f\u5982\uff1a<br \/> yyyy-MM-dd<br \/> HH:mm:ss<br \/> yyyy-MM-dd HH:mm:ss<br \/> yyyy-MM-dd HH:mm:ss.SSS<br \/> yyyy-MM-dd HH:mm:ss.SSSSSS<br \/> yyyy-MM-dd HH:mm:ss.SSSSSSSSS<br \/> yyyy-MM-dd&#8217;T&#8217;HH:mm:ssZ \u7b49\u7b49 \uff0c\u652f\u6301\u6beb\u79d2\u3001\u5fae\u79d2\u548c\u7eb3\u79d2\u7b49\u7cbe\u786e\u65f6\u95f4\u3002<\/p>\n<p>\uff08 1 \uff09\u683c\u5f0f\u5316\u65b9\u6cd5\uff0cformat*\uff0c \u6bd4\u5982 formatToDateStr(Date date) \u683c\u5f0f\u5316\uff0c\u8fd4\u56de\u65e5\u671f\u90e8\u5206\uff0c\u5982\uff1ayyyy-MM-dd \uff1b<br \/> format(Date date, DateTimeFormatter formatter) formatter \u53ef\u4ee5\u9009\u62e9\u5df2\u5b9a\u4e49\u597d\u7684 formatter \u6bd4\u5982 YYYY_MM_DD_HH_MM_SS_FMT \uff08 yyyy-MM-dd HH:mm:ss \uff09\u683c\u5f0f\u5316\u65e5\u671f\u3002<\/p>\n<p>\uff08 2 \uff09\u89e3\u6790\u65b9\u6cd5\uff0cparse*\uff0c \u6bd4\u5982 parseDateStrToDate(String text) \u89e3\u6790\u65e5\u671f yyyy-MM-dd\uff0c\u8fd4\u56de Date \uff1b<br \/> parseToDate(String text, DateTimeFormatter formatter) \u6839\u636e formatter \u89e3\u6790\u4e3a Date \u3002<\/p>\n<p>\uff08 3 \uff09\u81ea\u52a8\u89e3\u6790\u65b9\u6cd5\uff0c\u6839\u636e\u5b57\u7b26\u4e32\u7279\u70b9\u81ea\u52a8\u8bc6\u522b\u89e3\u6790\uff0csmartParse*\uff0c\u6bd4\u5982 smartParseToDate(String text) \u81ea\u52a8\u89e3\u6790 Date \u3002<\/p>\n<p>\uff08 4 \uff09 ISO \u683c\u5f0f\uff08\u5305\u542b T \uff09\u81ea\u52a8\u89e3\u6790\u65b9\u6cd5\uff0c\u6839\u636e\u5b57\u7b26\u4e32\u7279\u70b9\u81ea\u52a8\u8bc6\u522b\u89e3\u6790\uff0cparseIso*\uff0c\u6bd4\u5982 parseIsoToDate(String text) \u81ea\u52a8\u89e3\u6790 Date \u3002<\/p>\n<p>\uff08 5 \uff09\u89e3\u6790\u65f6\u95f4\u6233\u65b9\u6cd5, parseEpochMilli*\uff0c \u6bd4\u5982 parseEpochMilliToDate(String text)\uff0c\u89e3\u6790\u65f6\u95f4\u6233\u4e3a Date\uff0c\u5982 1590224790000 \u3002<\/p>\n<p>\uff08 6 \uff09\u89e3\u6790 Date \u9ed8\u8ba4\u683c\u5f0f\uff0cparseDateDefaultStr*\uff0c\u6bd4\u5982 parseDateDefaultStrToDate(String text)<br \/> \u89e3\u6790 EEE MMM dd HH:mm:ss zzz yyyy \u6bd4\u5982\uff1a Sat May 23 17:06:30 CST 2020 \u4e3a Date \u3002<\/p>\n<p>\uff08 7 \uff09\u81ea\u5b9a\u4e49\u65f6\u533a\u683c\u5f0f\u5316\u65b9\u6cd5\uff0c\u6bd4\u5982 format(Date date, DateTimeFormatter formatter, String zoneId)\uff0c\u6839\u636e zoneId \u683c\u5f0f\u5316 Date \u3002<\/p>\n<p>\uff08 8 \uff09\u81ea\u5b9a\u4e49\u6a21\u677f\u683c\u5f0f\u5316\u65b9\u6cd5\uff0c\u6bd4\u5982 format(Date date, String dateFormatPattern)\uff0c\u6839\u636e dateFormatPattern \u683c\u5f0f\u5316 Date \u3002<\/p>\n<p>\uff08 9 \uff09\u81ea\u5b9a\u4e49\u6a21\u677f\u89e3\u6790\u65b9\u6cd5\uff0c\u6bd4\u5982 parseToDate(String text, String dateFormatPattern)\uff0c\u6839\u636e dateFormatPattern \u683c\u5f0f\u5316 Date \u3002<\/p>\n<p>\uff08 10 \uff09 Timestamp \u9ed8\u8ba4\u683c\u5f0f\uff08 yyyy-mm-dd hh:mm:ss.fffffffff \u5176\u4e2d fffffffff \u7eb3\u79d2\uff0c\u7701\u7565\u540e\u9762\u7684 0 \uff09\u683c\u5f0f\u5316\u65b9\u6cd5\u3002<br \/> \u6bd4\u5982 formatTimestampStyle(Date date)\u3002<\/p>\n<p>\uff08 11 \uff09 Timestamp \u9ed8\u8ba4\u683c\u5f0f\uff08 yyyy-mm-dd hh:mm:ss.fffffffff \u5176\u4e2d fffffffff \u7eb3\u79d2\uff0c\u7701\u7565\u540e\u9762\u7684 0 \uff09\u89e3\u6790\u65b9\u6cd5\u3002<br \/> \u6bd4\u5982 parseTimestampStyleToDate(String text)\u3002<\/p>\n<p>\uff08 12 \uff09\u9a8c\u8bc1\u65e5\u671f\u683c\u5f0f\u662f\u5426\u6b63\u786e\u65b9\u6cd5\uff0cisValidDate*\uff0c \u6bd4\u5982 isValidDate(String text)\uff0c\u9a8c\u8bc1 yyyy-MM-dd \u683c\u5f0f\u5b57\u7b26\u4e32\u662f\u5426\u6b63\u786e\u3002<\/p>\n<p>\uff08 13 \uff09\u6839\u636e\u81ea\u5b9a\u4e49\u6a21\u677f\u6570\u7ec4\u89e3\u6790\u65b9\u6cd5\uff0c \u6bd4\u5982 parseToDate(String text, String[] dateFormatPatterns)\uff0cdateFormatPatterns \u652f\u6301\u591a\u79cd\u6a21\u677f\uff0c\u53ea\u8981\u5176\u4e2d\u4e00\u4e2a\u89e3\u6790\u6210\u529f\u5c31\u8fd4\u56de\u5bf9\u5e94 Date \u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u683c\u5f0f\u5316\u548c\u89e3\u6790\u4e0e\u7cfb\u7edf\u65f6\u533a\u4e0d\u540c\u7684\u65f6\u95f4\u65f6\uff0c\u4f7f\u7528\u81ea\u5b9a\u4e49\u65f6\u533a\u683c\u5f0f\u5316\u65b9\u6cd5\uff0c\u6216\u53ef\u4ee5\u4f7f\u7528 withZone \u65b9\u6cd5\u91cd\u65b0\u8bbe\u7f6e\u65f6\u533a\uff0c\u6bd4\u5982\uff1a<br \/> YYYY_MM_DD_HH_MM_SS_SSS_FMT.withZone(ZoneId.of(&#8220;Europe\/Paris&#8221;) \u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>4.\u65e5\u5386\u5de5\u5177\u7c7b CalendarUtil<\/h2>\n<p>\u5305\u62ec\uff1a<br \/> \uff08 1 \uff09\u751f\u6210\u6307\u5b9a\u65f6\u95f4\u7684\u65e5\u5386\uff08\u5305\u542b\u5e74\u3001\u6708\u548c\u65e5\u5c42\u7ea7\u5173\u7cfb\u7684\u65e5\u5386\uff09\u65b9\u6cd5\uff0cgenerateCalendar* \u6bd4\u5982 generateCalendar(int year, int month) \u751f\u6210\u6307\u5b9a\u5e74\u6708\u7684\u65e5\u5386\u3002<br \/> \uff08 2 \uff09\u751f\u6210\u6307\u5b9a\u65f6\u95f4\u7684\u65e5\u5386\uff08\u5305\u542b\u5e74\u3001\u6708\u548c\u65e5\u5c42\u7ea7\u5173\u7cfb\u7684\u65e5\u5386\uff09\uff0c\u5305\u542b\u519c\u5386\u548c\u6240\u6709\u8282\u5047\u65e5\u4fe1\u606f\u65b9\u6cd5\uff0cgenerateCalendarWithHoliday*\uff0c \u6bd4 generateCalendarWithHoliday(int year, int month, Map&lt;String, String&gt; localHolidayMap,Map&lt;String, String&gt; chineseHolidayMap, Map&lt;String, Integer&gt; dateTypeMap)\u751f\u6210\u6307\u5b9a\u5e74\u6708\u7684\u65e5\u5386\uff0c\u5305\u542b\u519c\u5386\u548c\u6240\u6709\u8282\u5047\u65e5\u4fe1\u606f\uff0c\u53ef\u4ee5\u81ea\u5b9a\u4e49\u8282\u5047\u65e5\u548c\u5de5\u4f5c\u65e5\u7b49\u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>5.\u519c\u5386\u65e5\u671f\u7c7b LunarDate<\/h2>\n<p>\u5305\u542b\uff1a<br \/> \uff08 1 \uff09\u519c\u5386\u65e5\u671f\u5e74\u6708\u65e5\u8ba1\u7b97\u3002<br \/> \uff08 2 \uff09\u519c\u5386\u5c81\u6b21\uff0c\u751f\u8096\u5c5e\u76f8\u8ba1\u7b97\u3002<br \/> \uff08 3 \uff09\u4e8c\u5341\u56db\u8282\u6c14\u8ba1\u7b97\u7b49<br \/> \u6ce8\u610f\uff1a \u4ec5\u652f\u6301\u516c\u5386 1900-2100 \u5e74\u7684\u519c\u5386\u8f6c\u6362\u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>6.\u8282\u5047\u65e5\u8ba1\u7b97\u7c7b Holiday<\/h2>\n<p>\u5305\u542b\uff1a<br \/> \uff08 1 \uff09\u516c\u5386\u8282\u5047\u65e5\u8ba1\u7b97\uff0cgetLocalHoliday* \u6bd4\u5982 getLocalHoliday(Date date) \u8ba1\u7b97 date \u7684\u516c\u5386\u8282\u65e5\uff0cgetLocalHoliday(Date date, Map&lt;String, String&gt; localHolidayMap) \u53ef\u4ee5\u4f20\u5165\u81ea\u5b9a\u4e49\u516c\u5386\u8282\u65e5\u6570\u636e\u3002<br \/> \uff08 2 \uff09\u519c\u5386\u8282\u5047\u65e5\u8ba1\u7b97\uff0cgetChineseHoliday* \u6bd4\u5982 getChineseHoliday(Date date) \u8ba1\u7b97 date \u7684\u519c\u5386\u8282\u65e5\uff0cgetChineseHoliday(Date date, Map&lt;String, String&gt; chineseHolidayMap) \u53ef\u4ee5\u4f20\u5165\u81ea\u5b9a\u4e49\u519c\u5386\u8282\u65e5\u6570\u636e\u3002<br \/> \uff08 3 \uff09\u4e8c\u5341\u56db\u8282\u6c14\u8ba1\u7b97\uff0cgetSolarTerm* \u6bd4\u5982 getSolarTerm(Date date) \u8ba1\u7b97 date \u7684\u4e8c\u5341\u56db\u8282\u6c14\u3002<\/p>\n<p>\u6ce8\u610f\uff1a \u519c\u5386\u548c\u4e8c\u5341\u56db\u8282\u6c14\u4f7f\u7528\u519c\u5386\u65e5\u671f\u7c7b LunarDate\uff0c\u4ec5\u652f\u6301\u516c\u5386 1900-2100 \u5e74\u7684\u8ba1\u7b97\u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>7.Cron \u8868\u8fbe\u5f0f\u5de5\u5177\u7c7b CronExpressionUtil<\/h2>\n<p>cron \u8868\u8fbe\u5f0f\u4ece\u5de6\u5230\u53f3\uff08\u7528\u7a7a\u683c\u9694\u5f00\uff09\uff1a\u79d2\uff08 0-59 \uff09 \u5206\uff08 0-59 \uff09 \u5c0f\u65f6\uff08 0-23 \uff09 \u65e5\u671f\uff08 1-31 \uff09 \u6708\u4efd\uff08 1-12 \u7684\u6574\u6570\u6216\u8005 JAN-DEC \uff09 \u661f\u671f\uff08 1-7 \u7684\u6574\u6570\u6216\u8005 SUN-SAT \uff08 1=SUN \uff09\uff09 \u5e74\u4efd\uff08\u53ef\u9009\uff0c1970-2099 \uff09<br \/> \u6240\u6709\u5b57\u6bb5\u5747\u53ef\u4f7f\u7528\u7279\u6b8a\u5b57\u7b26\uff1a, &#8211; * \/ \u5206\u522b\u662f\u679a\u4e3e\uff0c\u8303\u56f4\uff0c\u4efb\u610f\uff0c\u95f4\u9694<br \/> \u65e5\u671f\u53e6\u5916\u53ef\u4f7f\u7528\uff1a? L W \u5206\u522b\u662f\u4efb\u610f\uff0c\u6700\u540e\uff0c\u6709\u6548\u5de5\u4f5c\u65e5(\u5468\u4e00\u5230\u5468\u4e94)<br \/> \u661f\u671f\u53e6\u5916\u53ef\u4f7f\u7528\uff1a? L # \u5206\u522b\u662f\u4efb\u610f\uff0c\u6700\u540e\uff0c\u6bcf\u4e2a\u6708\u7b2c\u51e0\u4e2a\u661f\u671f\u51e0<br \/> \u5e38\u7528 cron \u8868\u8fbe\u5f0f\uff1a<br \/> \uff08 1 \uff09 0 0 2 1 * ? * \u8868\u793a\u5728\u6bcf\u6708\u7684 1 \u65e5\u7684\u51cc\u6668 2 \u70b9\u89e6\u53d1<br \/> \uff08 2 \uff09 0 15 10 ? * MON-FRI \u8868\u793a\u5468\u4e00\u5230\u5468\u4e94\u6bcf\u5929\u4e0a\u5348 10:15 \u6267\u884c\u4f5c\u4e1a<br \/> \uff08 3 \uff09 0 15 10 ? * 6L 2002-2006 \u8868\u793a 2002-2006 \u5e74\u7684\u6bcf\u4e2a\u6708\u7684\u6700\u540e\u4e00\u4e2a\u661f\u671f\u4e94\u4e0a\u5348 10:15 \u6267\u884c\u4f5c<br \/> \uff08 4 \uff09 0 0\/30 9-17 * * ? \u671d\u4e5d\u665a\u4e94\u5de5\u4f5c\u65f6\u95f4\u5185\u6bcf\u534a\u5c0f\u65f6<br \/> \uff08 5 \uff09 0 15 10 L * ? \u6bcf\u6708\u6700\u540e\u4e00\u65e5\u7684\u4e0a\u5348 10:15 \u89e6\u53d1<br \/> \uff08 6 \uff09 0 15 10 ? * 6#3 \u6bcf\u6708\u7684\u7b2c\u4e09\u4e2a\u661f\u671f\u4e94\u4e0a\u5348 10:15 \u89e6\u53d1<\/p>\n<p>\u5305\u542b<br \/> \uff08 1 \uff09\u9a8c\u8bc1\u548c\u683c\u5f0f\u5316 Cron \u8868\u8fbe\u5f0f\u65b9\u6cd5\uff0cisValidExpression \u548c formatExpression \u3002<br \/> \uff08 2 \uff09\u751f\u6210\u4e0b\u4e00\u4e2a\u6216\u591a\u4e2a\u6267\u884c\u65f6\u95f4\u65b9\u6cd5\uff0cgetNextTime \u548c getNextTimeList \u3002<br \/> \uff08 3 \uff09\u751f\u6210\u4e0b\u4e00\u4e2a\u6216\u591a\u4e2a\u6267\u884c\u65f6\u95f4\u7684\u65e5\u671f\u683c\u5f0f\u5316\uff08 yyyy-MM-dd HH:mm:ss \uff09\u65b9\u6cd5\uff0cgetNextTimeStr \u548c getNextTimeStrList \u3002<br \/> \uff08 4 \uff09\u5bf9\u6bd4 Cron \u8868\u8fbe\u5f0f\u4e0b\u4e00\u4e2a\u6267\u884c\u65f6\u95f4\u662f\u5426\u4e0e\u6307\u5b9a date \u76f8\u7b49\u65b9\u6cd5\uff0cisSatisfiedBy \u3002<\/p>\n<p>\u6ce8\u610f\uff1a \u5e95\u5c42\u4f7f\u7528 quartz \u7684 CronExpression \u5904\u7406\u3002<\/p>\n<p>\u8be6\u7ec6\u4f7f\u7528\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<h2>8.\u8ba1\u7b97\u8017\u65f6\u5de5\u5177 CostUtil<\/h2>\n<p>\u8ba1\u7b97\u8017\u65f6\u5de5\u5177\uff0c\u652f\u6301\u79d2\uff0c\u6beb\u79d2\uff0c\u7eb3\u79d2<\/p>\n<p>\u5305\u62ec\uff1a<br \/> \uff08 1 \uff09\u8ba1\u7b97\u8017\u65f6\uff0c\u8fd4\u56de\u8017\u65f6\u7ed3\u679c\u3002<br \/> \uff08 2 \uff09\u8ba1\u7b97\u8017\u65f6\uff0c\u81ea\u5b9a\u4e49\u4efb\u52a1\u540d\u79f0\uff0c\u8f93\u51fa\u8017\u65f6\u7ed3\u679c\u3002<br \/> \uff08 3 \uff09\u8ba1\u7b97\u8017\u65f6\uff0c\u8fd4\u56de\u7cbe\u786e\u8ba1\u65f6\uff0c\u5e26 3 \u5c0f\u6570\u7684\u7ed3\u679c\uff0c\u4f7f\u7528 ROUND_DOWN \u820d\u5f03\u8d85\u8fc7 3 \u4f4d\u7684\u5c0f\u6570\u90e8\u5206\u7b49\u3002<\/p>\n<h1>\u53c2\u4e0e\u9879\u76ee<\/h1>\n<p> <\/p>\n<h2>1.\u63d0 bug \u548c\u5efa\u8bae<\/h2>\n<ul>\n<li>Issues<\/li>\n<\/ul>\n<h2>2.\u8d21\u732e\u4ee3\u7801<\/h2>\n<p>\uff08 1 \uff09 fork \u9879\u76ee\u3002<br \/> \uff08 2 \uff09\u5728 dev \u5206\u652f\u4fee\u6539\u3002<br \/> \uff08 3 \uff09\u63d0\u4ea4 pull request \u3002<\/p>\n<\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>4<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"3497830\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : tomxin7 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u652f\u6301\u4e00\u4e0b                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"3497831\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : xkzhangsan <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @tomxin7 \u611f\u8c22\u652f\u6301\uff01                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"3497832\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : 18258226728 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u652f\u6301                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"3497833\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : xkzhangsan <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @18258226728 \u611f\u8c22\u652f\u6301\uff01                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>xk-time Java \u65f6\u95f4\u5de5\u5177&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/161681"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=161681"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/161681\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=161681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=161681"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=161681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}