XK-Time은 시간 변환, 시간 계산, 시간 형식, 시간 구문 분석, 캘린더, 시간 CRON 표현 및 시간 NLP 등을위한 도구입니다. Java8, 스레드-안전, 사용하기 쉬운 및 70 개 이상의 일반적인 날짜 서식 템플릿, Java8 시간 클래스 및 날짜, 3 분기 종속성을 지원합니다.
<dependency>
<groupId>com.github.xkzhangsan</groupId>
<artifactId>xk-time</artifactId>
<version>3.2.4</version>
</dependency>
Mini版本不包含 time nlp 功能,更简洁。
<dependency>
<groupId>com.github.xkzhangsan</groupId>
<artifactId>xk-time</artifactId>
<version>3.2.4.Mini</version>
</dependency>
compile group: 'com.github.xkzhangsan', name: 'xk-time', version: '3.2.4'
XK-Time Toolkit은 Java8 API를 사용합니다.이 중에는 Instant, LocalDate, LocalDateTime, LocalTime, ZonedDateTime 등이 모든 스레드 안전 클래스이며 더 풍부한 방법이 추가되었습니다. 이를 바탕으로 관련 도구 클래스가 더 많은 스레드 안전을 만들기 위해 개발되어 사용하기에 더 편리합니다.
XK-Time Toolkit, 위의 함수는 시간 변환, 시간 계산 및 시간 형식 및 분석에 따라 3 개의 툴 클래스로 나뉩니다 : DateTimeConverterutil, DateTimeCalculatorUtil 및 DateTimeFormatterUtil. 각 클래스에는 쉽게 사용할 수있는 한 가지 기능 만 있습니다.
2.4.1 Joda-Time 및 Java8 시간 패키지의 구현은 기본적으로 Stephen Colebourne이 지배하는 동일합니다. Java8에서 시작하여 Java8 시간 패키지를 사용하여 Joda Time을 대체하는 것이 좋습니다.
2.4.2 xk-time은 Java 8 Date API를 기반으로하며 이전 DateUtil과 유사한 보충 도구입니다.
(1) Java8 클래스 라이브러리는 계층 적 수준에서 수직으로 구현되는 반면 XK-Time은 변환, 계산, 서식 및 분석과 같은 일반적인 기능에 따라 3 개의 클래스로 나뉩니다.
(2) Java8 날짜는 새 클래스로 변환되며 API 문서를보아야하며 XK-Time은 내부적으로 변환되므로 날짜는 Java8의 새로운 기능을 직접 사용할 수 있습니다.
(3) xk-time re-remplements Java 8 API에 따라 DateUtil의 일반적으로 사용되는 기능을 동시에 동시에, 일부 확장은 더 편리하게 사용하도록 만들어집니다.
포함하다:
(1) 날짜, LocalDate, LocalDateTime, LocalTime, Instant, ZonedDateTime, 연말, 타임 스탬프, 타임 스탬프 및 TemporalAccessor가 서로 변환됩니다.
(2) 일, 시간, 분, 초 및 밀리 초과 같은 시간 단위는 서로 변환되어 작은 단위의 정확한 변환을 큰 단위로 지원합니다. 예를 들어, MinutetoHourPrecise (긴 NUM) 90 분에서 몇 시간 (1.5 시간).
(3) TozonedDateTime (날짜, String Zoneid) 및 TozonedDateTimeAndTransformzone (LocalDateTime LocalDateTime, String TargetZoneid)과 같은 지정된 시간대로 변환을 지원하는 동안 구역 설정 시간을 변환합니다.
ZonedDateTime 관련 변환, 특히 ZonedDateTime으로의 다른 시간 전환의 경우 시간의 일관성과 해당 시간대에주의를 기울여야합니다.
자세한 용도로 관련 테스트 코드 인 DateTimeConvertiltest를 볼 수 있습니다.
포함하다:
(1) 시간 속성 방법 (연도, 월, 시간, 분, 분, 밀리 초, 주간, 타임 스탬프 등), get* 예를 들어, getyear (날짜) 연도 부분, GetMonthcnlong (날짜)은 중국어, GetDayofweekcn (날짜)을 받고 중국어를받습니다.
(2) 시간 플러스 작업 방법을 가져 오십시오. 예를 들어, 플러스 시어 (날짜 날짜, 긴 금액)는 현재 연도의 금액 값을 증가시킵니다.
(3) 예를 들어, 마이너스 (예 : 날짜 날짜, 긴 금액)와 같은 시간 방지 작업 방법을 얻으십시오.
(4) 예를 들어, withyear (날짜 날짜, Long NewValue)와 함께 시간 수정 속성 메소드를 가져와 현재 시간과 연도 값을 NewValue로 수정하십시오.
(5)* 예를 들어, Betweentotaldays (날짜 시작, 날짜 최종 초보자)를 비교하여 2 번 비교하여 총 일수를 반환하기 위해 비교하십시오.
(6) ISLEAPYEAR (날짜 날짜)와 같은 다른 일반적인 방법은 윤년인지 여부, ISWeekEnd (날짜) 주말인지 여부를 결정하는 ISEXPIRY (String Year Monthstr) 등을 결정합니다.
(7) Transform (ZonedDateTime ZonedDateTime, String Zoneid)과 같은 시간대 전환 계산 방법, 변환*
(8) 비교 및 평등 방법 비교, 비교*, 비교 (날짜 1, 날짜 날짜 2)
(9) starttimeofmonth () 시작 시간 첫날 날짜 +00 : 00 : 00, endtimeofmonth () 마지막 날 날짜 +23 : 59 : 59와 같은 정확한 시작 시간 방법, start*, end*를 얻습니다. endaccuracytimeof*, 밀리 초 (날짜)에 정확하며 나노 초 (localdateme)에 정확합니다.
(10) 생일, 축제 등과 같은주기적인 날짜 비교 판단에 대해 같은 달과 일을 비교하고 판단하는 방법, issamemonthday*, nextsamemonthday*사이.
(11) 별자리 계산 방법, getConstellationnamecn (String MonthdayStr)과 같은 GetConstellation*은 날짜에 따라 별자리를 계산합니다.
(12) 지정된 연도 및 월 또는 시작 시간 간격의 시간 목록을 계산하고 GetDatelist (int 년, int month)와 같은 Get*목록은 지정된 연도 및 월의 시간 목록을 계산합니다.
(13) ReduceAccuracyToday (날짜 날짜)와 같은 시간 정확도를 줄이고, Reduccuracyto*를 줄이고, 시간 정확도를 며칠로 줄이고, 다른 방법에 0을 추가하고, 예를 들어 2020-04-23 00:00:00을 반환합니다.
(14) timeStamp 메소드, getepoch*, 예를 들어 getepochmilli ()가 타임 스탬프를 가져옵니다.
(15) getage (날짜 생일)와 같은 연령 계산 방법, getage*는 생일마다 연령을 계산합니다.
(16) 생일이 여기 있는지 여부를 결정하는 방법, isbirthday*, 예를 들어, isbirthday (날짜)는 현재 날짜가 생일을 기준으로 여기에 있는지 결정합니다.
(17) 주간 주 (날짜 날짜)와 같은 주 1 주, 주당 주 1 주를 계산하는 방법.
(18) Iszhouyi (날짜), Ismonday와 같은 월요일과 금요일 방법, Iszhouyi*가 있는지 확인하십시오.
(19) Gettwelvetwo (날짜)와 같은 12 시간 계산 방법 인 Gettwelvetwo*는 지정된 시간에 해당하는 12 시간을 얻습니다.
(20) GetQuarter (날짜 날짜)와 같은 분기 계산 방법, GetQuarter*는 지정된 시간에 해당하는 분기를 가져옵니다.
(21) STARTTIMEOFFIRSTQUARTER (Int Year)와 같은 분기 (4/4), STARTTIMEOF*QUART의 정확한 시작 시간 방법을 받으십시오.
(22) STARTTIMEOFYEAR (int 연도)와 같은 정확한 시작 시간 방법 인 STARTTIMEOFYEAR, 지정된 연도의 시작 시간을 얻으십시오.
(23) 일반적으로 사용되는 시간 (내일, 다음 주, 다음 달, 내년 등) 내일 ()과 같은 계산 방법, 내일 계산 및 반환 날짜.
(24) Withdayofweek (날짜 날짜, Long NewValue)와 같이 주중*과 함께 주 값 방법을 수정하고, 지정된 값 NewValue로 주를 수정하고, 반환 날짜를 수정하십시오.
(25) 현재 날짜가 근무일인지 여부와 다음 근무일, ischinesworkday*, Nextchinesworkday*,
예를 들어, ischinesworkday (날짜, 문자열 홀리데이 데이터), NextChinesworkday (날짜 날짜, 문자열 홀리데이 데이터),
휴일 데이터, 휴일 데이터가 연도를 지원하지 않으면 월요일부터 금요일까지 근무일로 판단됩니다. 아래는 2021 년에 편집 한 휴일 정보입니다.
2021-01-01 : 0,2021-02-07 : 1,2021-02-11 : 0,2021-02-12 : 0,2021-02-15 : 0,2021-02-16 : 0,202 1-02-17 : 0,2021-02-20 : 1,2021-04-05 : 0,2021-04-25 : 1,2021-05-03 : 0,2021-05-04 : 0,2021-0 5-05 : 0,2021-05-08 : 1,2021-06-14 : 0,2021-09-18 : 1,2021-09-20 : 0,2021-09-21 : 0,2021-09-2 6 : 1,2021-10-01 : 0,2021-10-04 : 0,2021-10-05 : 0,2021-10-06 : 0,2021-10-07 : 0,2021-10-09 : 1
(26) 2 개 이상의 기간 동안 중첩 (교차) 방법이 있는지, Isoverlap (날짜 StartDate1, Date endDate1, Date startDate2, Date endDate2)과 같은 Isoverlap*, Isoverlap*, 겹침이 true를 반환합니다.
(27) 평균 시간을 계산하는 방법, 평균 평균 시간*(예 : List Datelist)은 "15:03:03"과 같은 평균 시간을 반환합니다.
(28) 밀리 초 값에 따라 카운트 다운 방법을 계산하고, 수신 시간 개체 및 지정된 형식 인 Countdown (Long Millis)과 같은 카운트 다운*을 지원하고 "27 시간 10 분, 30 초"와 같은 카운트 다운을 반환합니다.
(29) getDateFormatList (날짜 시작, 날짜 종료, 문자열 날짜 formpattern)와 같은 지정된 간격에 대한 서식 시간 목록 메소드를 가져옵니다.
(30) 오버랩 타임 (날짜 startDate1, Date endDate1, Date StartDate2, Date endDate2)과 같은 2 개의 기간의 중첩 (교차) 시간 방법을 계산하고 밀리 초 값을 반환합니다.
자세한 용도로 관련 테스트 코드를 볼 수 있습니다.
다음과 같은 일반적인 날짜 형식을 포함합니다.
yyyy-mm-dd
HH : MM : SS
yyyy-mm-dd hh : mm : ss
yyyy-mm-dd hh : mm : ss.sss
yyyy-mm-dd hh : mm : ss.ssssssss
YYYY-MM-DD HH : MM : SS.SSSSSSSSSSSS
yyyy-mm-dd't'hh : mm : ssz 등은 밀리 초, 마이크로 초 및 나노초와 같은 정확한 시간을 지원합니다.
(1) Formattodatest (날짜)와 같은 형식 방법, 형식*은 다음과 같은 날짜 부분을 반환합니다. yyyy-mm-dd;
형식 (날짜 날짜, dateTimeformatter formatter) Formatter 당신은 yyyy_mm_dd_hh_mm_ss_ss_fmt (yyyy-mm-dd hh : mm : ss) 형식 날짜와 같은 정의 된 형식을 선택할 수 있습니다.
(2) parsedatestrtodate (문자열 텍스트)와 같은 분석 방법, Parse*는 날짜 yyyy-mm-dd, 반환 날짜를 구문 분석합니다.
ParSetodate (String Text, DateTimeFormatter formatter) Formatter에 따라 현재까지 구문 분석.
(3) SmartParSetodate (문자열 텍스트)와 같은 String, SmartParse*의 특성에 따라 자동 파싱 방법은 자동으로 날짜를 구문 분석합니다.
(4) ISO 형식에 대한 자동 구문 분석 방법 (t 포함)은 문자열의 특성에 따라 자동으로 인식되고 구문 분석됩니다. parseisodate (문자열 텍스트)와 같은 parseiso*는 날짜를 자동으로 구문 분석합니다.
(5) Parseepochmilli*(문자열 텍스트)와 같은 Parseepochmilli*, Parseepochmilli*, Parseepochmilli*, Parsing Timestamp는 1590224790000과 같은 날짜입니다.
(6) ParsedatedEfaultStrtodate (String Text)와 같은 기본 날짜 형식 인 ParsedateFaultstr*를 구문 분석합니다.
eee mmm dd hh : mm : ss zzz yyyy 분석 예 : 5 월 23 일 17:06:30 cst 2020은 날짜입니다.
(7) 형식 (날짜 날짜, DateTimeFormatter formatter, String ZoneID)과 같은 사용자 정의 시간대 형식 형식, ZoneID에 따른 형식 날짜.
(8) dateformatpattern에 따라 형식 (날짜 날짜, 문자열 dateformatpattern), 형식 날짜와 같은 템플릿 형식 형식을 사용자 정의하십시오.
(9) parsetodate (문자열 텍스트, 문자열 dateformatpattern)와 같은 사용자 정의 템플릿 구문 분석 방법, dateformatpattern에 따른 형식 날짜.
(10) 타임 스탬프 기본 형식 (yyyy-mm-dd hh : mm : ss.ffffffffffff ffffffff nanoseconds 다음 0) 형식을 생략합니다.
예를 들어 formattimestampStyle (날짜)입니다.
(11) 타임 스탬프 기본 형식 (yyyy-mm-dd hh : mm : ss.ffffffffffff fffffffff가 나노초 인 다음 0을 생략).
예를 들어, parsetimestampstyletodate (문자열 텍스트).
(12) 날짜 형식이 올바른지 확인하는 방법, isvaliddate (문자열 텍스트)와 같은 isvaliddate*는 yyyy-mm-dd 형식 문자열이 올바른지 확인합니다.
(13) Parsetodate (문자열 텍스트, 문자열 [] dateformatpatterns)와 같은 사용자 정의 템플릿 배열 구문 분석 방법에 따라 DateFormatPatterns는 여러 템플릿을 지원하고 구문 분석 중 하나가 성공하는 한 해당 날짜가 반환됩니다.
(14) 자연 언어 시간, 오늘, 내일, 다음 주, 다음 달, 내년, 어제, 마지막 주, 지난 달, 작년 등, parsenaturallangugetodate (문자열 텍스트),
parsenaturallanguagetodate (문자열 텍스트, 맵 <문자열, 문자열> 자연 통신)는 사용자 정의 자연 언어 시간 맵을 지원합니다.
(15) FormattochinesedAtest (날짜 날짜, 부울 Isuppercase)와 같은 중국 날짜 형식의 방법, Isuppercase False : 2021 년 9 월 11 일 True : 2021 년 9 월 11 일.
(16) ParseChinesedAteStrtodate (문자열 텍스트), 지원 : 2021 년 9 월 11 일 및 2021 년 9 월 11 일 형식 날짜 분석과 같은 중국 날짜 분석 방법.
참고 : 시스템 시간대와 다른 시간을 형식화하고 구문 분석 할 때 사용자 정의 시간 영역 서식 메소드를 사용하거나 Withzon 메소드를 사용하여 다음과 같은 시간대를 재설정 할 수 있습니다.
yyy_mm_dd_hh_mm_sssss_fmt.withzone (ZoneId.of ( "Europe/Paris").
자세한 용도로 관련 테스트 코드를 볼 수 있습니다 : DateTimeFormatterTiltest.
포함하다:
(1) 지정된 시간 동안 캘린더를 생성합니다 (연도, 월 및 일의 계층을 포함하는 캘린더). GenerateCalendar* 예를 들어, GenerateCalendar (int 연도, int month)는 지정된 연도 및 월에 대한 캘린더를 생성합니다.
(2) Lunar Calendar 및 모든 휴가 정보 방법, GenerateCalendarwithHoliday*, GenerateCalendarWithHoliday (int month, map <string, string> localholidagemap, map <string)를 포함하여 지정된 시간 (연도, 월 및 일의 계층 구조를 포함하는 캘린더)을 생성합니다. 음력 달력 및 모든 휴가 정보를 포함하여 지정된 연도 및 월의 캘린더 및 휴일 및 근무일 등을 사용자 정의 할 수 있습니다.
자세한 용도로 관련 테스트 코드 인 Calendarutiltest를 볼 수 있습니다.
포함하다:
(1) 음력 날짜, 연도, 월 및 일의 계산.
(2) 음력 동안 조디악 징후를 계산합니다.
(3) 24 개의 태양열 항의 계산 등 (4) 그레고리안 달력에 대한 음력에 대한 노트 : 1900-2100 그레고리 캘린더의 음력 변환 만 지원됩니다.
자세한 용도로 관련 테스트 코드 인 LunardateTest를 볼 수 있습니다.
포함하다:
(1) Gregorian 휴일 계산, getlocalholiday* 예를 들어, GetLocalHoliday (날짜) Gregorian Holidays를 계산합니다. GetLocalHoliday (날짜, MAP <String, String> LocalHolidayMap)는 맞춤형 Gregorian Holiday 데이터로 전달할 수 있습니다.
(2) 음력 휴일 계산, getchineseholiday* 예를 들어, getchineseholiday (날짜 날짜) 음력 휴가의 날짜를 계산합니다. Getchineseholiday (날짜 날짜,지도 <문자열, string> ChineseHolidayMap)는 맞춤형 휴일 데이터로 전달할 수 있습니다.
(3) 24 개의 태양 항, Getsolarterm*의 계산* 예를 들어 Getsolarterm (날짜 날짜)은 24 개의 태양열 이용 약관을 계산합니다.
참고 : Lunardate는 음력 달력과 24 개의 태양열에 사용되며 1900-2100 년의 Gregorian 달력 계산 만 지원합니다.
자세한 용도로 관련 테스트 코드를 볼 수 있습니다.
왼쪽에서 오른쪽으로 (공간별로 분리) : 초 (0-59) 시간 (0-59) 시간 (0-23) 날짜 (1-31) 달 (1-31) (1-12 또는 Jan-DEC의 정수) 주 (1-7 또는 Sun-Sat (1 = Sun)) 연도 (옵션, 1970-2099)
특수 문자는 모든 필드에 사용될 수 있습니다 :, - * / 열거, 범위, 임의의, 간격 날짜 및 기타 :? LW는 마지막, 유효한 근무일 (월요일 ~ 금요일)입니다.
이번 주를 사용할 수도 있습니다.? L #은 무엇이든, 마지막으로 Cron 표현식은 매월 주에 일반적으로 사용됩니다.
(1) 0 0 2 1 *? * (2) 0 15 10에 오전 2시에 오전 2시에 트리거링을 나타냅니다. * Mon-Fri는 과제가 월요일부터 금요일까지 오전 10시 15 분에 수행되었음을 나타냅니다 (3) 0 15 10? * 6L 2002-2006은 2002-2006 (4) 0 0/30 9-17 * *부터 매월 마지막 금요일 오전 10시 15 분에 과제가 수행되었음을 나타냅니다. 30 분마다 (5) 0 15 10 L *를 나타냅니다. 매월 마지막 날 오전 10시 15 분에 트리거링을 나타냅니다 (6) 0 15 10? * 6#3은 매월 셋째 금요일 오전 10시 15 분에 트리거링을 나타냅니다 (6) 0 15 10? * 6#3은 매월 셋째 금요일 오전 10시 15 분에 트리거링을 나타냅니다 (4) 0 0/30 9-17 *? 30 분마다 (5) 0 15 10 L *를 나타냅니다. 매월 마지막 날 오전 10시 15 분에 트리거링을 나타냅니다 (6) 0 15 10? * 6#3은 매월 셋째 금요일 오전 10시 15 분에 트리거링을 나타냅니다 (6) 0 15 10? * 6#3은 매월 셋째 금요일 오전 10시 15 분에 트리거링을 나타냅니다 (6) 0 15 10? *
(1) 검증 및 서식 CRON 표현 방법, isValidexpression 및 formatexpression을 포함합니다.
(2) 다음 이상의 실행 시간 방법 인 getnexttime 및 getnexttimelist를 생성합니다.
(3) 다음 실행 시간의 날짜 서식 (yyyy-mm-dd hh : mm : ss) 메소드, getNextTimeStrest 및 getNextTimeStrlist를 생성합니다.
(4) CRON 표현식의 다음 실행 시간이 지정된 날짜 방법 인 istAtisfiedBy와 동일인지 비교하십시오.
참고 : 기본 층은 석영의 cronexpression 처리를 사용합니다.
자세한 용도로 관련 테스트 코드 인 CronexpressionUtiltest를 볼 수 있습니다.
시간이 많이 걸리는 도구를 계산하고 초, 밀리 초, 나노초를 지원합니다
포함하다:
(1) 계산에는 시간이 걸리고 시간이 많이 걸리는 결과를 반환합니다.
(2) 계산에는 시간이 걸리고 작업 이름을 사용자 정의하며 시간 소모적 인 결과를 출력합니다.
(3) 계산 시간, 정확한 타이밍을 반환, 3 개의 소수판으로 Round_down을 사용하여 3 자리를 초과하는 소수점 부품을 버립니다.
자세한 용도로 관련 테스트 코드 인 CostuitLtest를 볼 수 있습니다.
기능 포함 :
(1) 현재 시간을 기준으로 자연스러운 시간을 분석하십시오.
(2) 지정된 시간을 기준으로 자연스러운 시간의 자연 언어를 분석하십시오.
(3) parsecurncurent 동시 실행과 같은 다양한 호출 방법을 추가하여 시간 초과 시간과 사용자 정의 스레드 풀을 설정하여 실행 효율성을 향상시킬 수 있습니다.
https://github.com/shinyke/time-nlp에서 수정되었습니다
일부 수정은 다음과 같이 이루어졌습니다.
(1) 속성을 캡슐화하고 낙타 명명 표준을 준수하도록 이름을 바꿉니다.
(2) 로딩 일반 리소스 파일을 싱글 톤로드로 변경하십시오.
(3) 클래스를 기능에 따라 별도의 클래스로 재분집합니다.
(4) Java 8 Date API를 사용하여 다시 작성하십시오.
(5) 주석을 추가하고 코드를 최적화합니다.
(6) 원래 프로젝트에서 문제를 수리하십시오 : 표준 시간 YYYY-MM-DD, YYYY-MM-DD HH : MM : SS 및 YYYY-MM-DD HH : MM 분석 문제.
(7) 원래 프로젝트에서 문제를 해결하십시오 : 1 시간, 1 시간 반, 1 시간 50 분 및 기타 분석 문제; 50 초, 10 분 30 초와 같은 초까지 지원하십시오.
(8) 원래 프로젝트의 문제 수리 : 현재 수리 시간은 오전 10시이므로 오후 3시는 내일 오후 3시 문제로 식별됩니다.
(9) 원래 프로젝트에서 문제를 해결하십시오 : 소수점 해상도 예외 문제를 해결하십시오.
(10) 성능 최적화, 사용 된 규칙을 사전 컴파일 한 후 캐시에 넣고 다음 번에 사용하여 성능을 향상시킵니다.
참고 : NLP는 특정 인식 실패율을 가지며 성공률을 계속 반복하고 개선합니다.
이 기능은 미니 버전에 포함되어 있지 않습니다.
자세한 용도로 관련 테스트 코드 인 Timenlputiltest를 볼 수 있습니다.
3 일 동안 캐시 시간 설정과 같은 단위 변환 계산을 용이하게하는 시간 단위 상수 : 3*milliseconds_per_day (하루 24*60*60*1000 밀리 초)
포함하다:
(1) milliseconds_per_seconds와 같은 기본 장치의 값을 초당 1000 밀리 초.
(2) seconds_per_day와 같은 초의 기본 값으로 변환합니다. 하루에 초 수는 24*60*60입니다.
(3) milliseconds_per_day와 같은 밀리 초의 기본 값으로 변환. 하루에 밀리 초 수는 24*60*60*1000입니다.
자세한 용도로 관련 테스트 코드 인 XKTIMECONSTANTTEST를 볼 수 있습니다.
(1) 포크 프로젝트.
(2) 개발 분기에서 수정하십시오.
(3) 풀 요청을 제출하십시오.
(1) 새해 첫날, 봄 축제, Qingming 페스티벌, 노동절, 드래곤 보트 페스티벌, 미드-만날 축제 및 기타 휴일과 같은 일반적인 휴일.
(2) 24 개의 태양열에 의해 지원됩니다.