XK-Time-это инструмент для преобразования времени, расчета времени, форматирования времени, анализа времени, календаря, выражения времени Cron и NLP времени и т. Д. Он использует Java8, безопасные потоки, простые в использовании и более 70 шаблонов форматирования форматирования даты, поддержка временного класса Java8, легкий вес, без третьей зависимости.
<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, среди которых мгновенный, LocalDate, LocalDateTime, LocalTime, ZONEDDATETIME и т. Д.-все это безразличные классы, и были добавлены более богатые методы. Исходя из этого, связанные классы инструментов разработаны, чтобы сделать их более безопасными, что делает их более удобными в использовании.
XK-Time Toolkit, вышеуказанные функции делятся на 3 класса инструментов в соответствии с преобразованием времени, расчетом времени, а также форматированием времени и анализом: DateTimeConverterutil, DateTimeCalculatorutil и DateTimeFormatterutil. Каждый класс имеет только одну функцию для легкого использования.
2.4.1 Реализация пакетов времени Joda-Time и Java8 в основном одинакова, в которых доминирует Стивен Коулборн. Начиная с Java8, рекомендуется использовать пакет времени Java8 для замены Joda-Time.
2.4.2 XK-Time основан на API даты Java 8 и является дополнительным инструментом, аналогичным предыдущему дате.
(1) Библиотека классов Java8 реализована вертикально на иерархическом уровне, в то время как XK-Time делится на 3 класса в соответствии с общими функциями, такими как преобразование, расчет, форматирование и анализ.
(2) Дата Java8 преобразуется в новый класс, и вам необходимо просмотреть документацию API, а XK-Time преобразуется внутри, так что дата может напрямую использовать новые функции Java8.
(3) xk-time переосмысливает обычно используемые функции DateUtil в соответствии с API Java 8, и в то же время производится некоторые расширения, чтобы использовать более удобные.
Включать:
(1) Date, Localdate, LocalDateTime, Localtime, Instant, ZoneDateTime, MOGONTH, временная метка, временная метка и временный директор конвертируются друг на друга.
(2) Временные единицы, такие как дни, часы, минуты, секунды и миллисекунд, преобразуются друг с другом, поддерживая точное преобразование небольших единиц в большие единицы. Например, MinuteToHourPrecise (Long Num) от 90 минут до часов, что составляет 1,5 часа.
(3) преобразовать ZoneDATETIME при поддержке конверсии в указанный часовой пояс, такой как TozoNedDateTime (дата дата, строковая зона) и TozoNedDateTimeAndTransformzone (LocalDateTime LocalDateTime, String Targetzoneid).
Обратите внимание, что для конверсий, связанных с ZonedDateTime, особенно для других преобразований времени в ZodenDateTime, вы должны обратить внимание на согласованность времени и соответствующего часового пояса.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: DateTimeConverterUtiltest.
включать:
(1) Получите метод атрибута времени (поддержка года, месяц, час, минута, миллисекунд, неделя, марки времени и т. Д.), Получить*, например, getyear (дата даты) получает годичную часть, Getmonthcnlong (дата даты) получает месяц китайский, GetDayOfWeekcn (дата даты), получите неделю китайскую.
(2) Получите метод работы плюс плюс, плюс*, например, плюс годы (дата даты, длинная сумма).
(3) Получить метод работы по времени разъединения, минус* Например, минус (дата дата, длинная сумматозабтракта) Текущее время-года уменьшает значение суммы.
(4) Получите метод атрибута модификации времени, например, с*, с Withyear (дата даты, длинное новое), чтобы изменить текущее значение времени и года в NewValue.
(5) Получите 2 раза для сравнения, между*, например, BetweentotalDays (Date StartinClusive, Date EndExclusize) Сравните 2 раза, чтобы вернуть общее количество дней.
(6) Другие общие методы, такие как IsleApyear (дата дата), чтобы определить, является ли это виром, Isweekend (дата даты), чтобы определить, истекает ли это выходные, истекание (String YearMonthstr) и т. Д.
(7) Метод расчета преобразования часового пояса, преобразование*, например, преобразование (ZoneDATETIME ZONEDDATETIME, String ZoneID)
(8) Сравните 2 раза и методы равенства, сравните*, например, сравнение (дата дата 1, дата дата 2)
(9) Получите точное метод начала времени, начало*, End*, например, startTimeOfMonth () Время начала месяца Дата первого дня +00: 00: 00, endTimeOfMonth () Дата последнего дня +23: 59: 59 Точно до секунд; EndaccuracyTimeOf*, точный до миллисекундов (дата), точный для наносекунд (LocalDateTime).
(10) Методы сравнения и оценки того же месяца и дня, Issamemonthday*, Metuextsamemonthday*, nextsamemonthday*, например, для периодических суждений о сравнении даты, таких как дни рождения, фестивали и т. Д.
(11) Метод расчета созвездия, GetConstellation*, такой как GetConstellationNamecn (String MonthdayStr), вычисляет созвездия на основе даты.
(12) Рассчитайте временный список указанного года и месяца или интервала времени или времени начала, список*, такой как GetDateList (int Year, INT Month), рассчитывает список времени указанного года и месяца.
(13) Метод снижения точности времени, REDUCEACCURACYTO*, такой как REDUCEACCURACYTODAY (дата дата), снизить точность времени до дней и добавить 0 к другим методам, вернуть, например, 2020-04-23 00:00:00.
(14) Получите метод временной метки, getepoch*, например, getepochmilli () Получает временную метку, getepochmilliformat () Получает строку формата TimeStamp (Yyyy-mm-dd HH: MM: SS)
(15) Метод вычисления возраста, Getage*, такой как Getage (дата рождения), рассчитывает возраст на день рождения.
(16) Метод определения того, является ли здесь день рождения здесь, Isbirthday*, например, Isbirthday (дата рождения), определите, является ли текущая дата здесь на основе дня рождения.
(17) Как вычислить количество недель, неделю*, например WeekOfMonth (дата даты), какая неделя месяца дата.
(18) Определите, метод понедельника и пятницы, Ismonday*, Iszhouyi*, такой как Ишжойи (дата даты), Ismonday.
(19) Метод расчета двенадцати часов, GetTwelVetWO*, такой как GetTwelVetWO (дата даты), получите двенадцать часов, соответствующих указанному времени.
(20) Метод расчета квартала, GetQuarter*, такой как GetQuarter (дата даты), получите квартал, соответствующий указанному времени.
(21) Получите точный метод времени начала за квартал (четыре квартала), starttimeof*квартал, такой как starttimeoffirstquarder (int year), получите первый квартал указанного года.
(22) Получите точный метод начального времени года, startTimeOfyear, такой как startTimeOfyear (int Year), получите время начала указанного года.
(23) Обычно используемое время (завтра, на следующей неделе, в следующем месяце, в следующем году и т. Д.) Методы расчета, такие как завтра (), рассчитаны завтра и дата возврата.
(24) Измените метод значения недели с DayOfweek*, например, withDayOfweek (дата даты, длинная новая), изменить неделю до указанного значения NewValue и даты возврата.
(25) Расчет китайского рабочего дня (включая информацию о празднике), включая такие методы, как определение того, является ли текущая дата рабочий день и следующий рабочий день, Ishineseworkday*, Nextchineseworkday*,
Например, ishineseworkday (дата, String HoldayData), NextChineseWorkDay (дата, дата, String HolidayData),
Праздничные данные, если данные о празднике не поддерживают год, они будут оценены с понедельника по пятницу как рабочие дни. Ниже приведена информация о празднике, которую я собрал на 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*, например, isoverlap (date startDate1, date enddate1, date startDate2, date endDate2), перекрытие возвращает true.
(27) Метод расчета среднего времени, среднее время*, например, AverageTime (список Datelist), возвращает среднее время, такое как «15:03:03».
(28) Рассчитайте метод обратного отсчета, основанный на миллисекундном значении, поддерживает входящие объекты времени и указанные форматы, обратный отсчет*, такие как обратный отсчет (длинный миллис), и возвращает обратный отсчет, такой как «27 часов, 10 минут, 30 секунд».
(29) Получить метод списка форматирования для указанного интервала, такого как getDateFormatlist (дата старта, конец даты, строка DateFormatPattern), поддерживает передачу в шаблонах форматирования.
(30) Рассчитайте метод перекрытия (пересечение) времени 2 периода времени, такого как OplAttime (Date StartDate1, Date EndDate1, Date StartDate2, Date EndDate2), и возвращает миллисекундное значение.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: DateTimeCalculatorTistest.
Содержит общие форматы даты, такие как:
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.ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
yyyy-mm-dd HH: MM: Ss.ssssssssssssss
Yyyy-mm-dd't'hh: MM: SSZ и т. Д. Поддерживает точные времена, такие как миллисекунд, микросекунд и наносекунд.
(1) Метод формата, формат*, такой как Formattodatestr (дата дата), возвращает дату, например: yyyy-mm-dd;
Формат (дата даты, формататер DateTimeFormatter). Вы можете выбрать определенное форматирование, такое как YYYY_MM_DD_HH_MM_SS_FMT (YYYY-MM-DD HH: MM: SS) Дата форматирования.
(2) аналитический метод, Parse*, такой как ParsedAtestodate (String Text). Разряд дату yyyy-mm-dd, дата возврата;
ParsetoDate (строковый текст, форматтер DateTimeFormatter).
(3) Метод автоматического анализа, автоматически распознает и разрабатывает в соответствии с характеристиками строки, SmartParse*, такой как SmartParSetodate (String Text), автоматически анализирует дату.
(4) Метод автоматического анализа для формата ISO (включая T) автоматически распознается и анализируется в соответствии с характеристиками строки. Parseiso*, такой как Parseisotodate (строковый текст) автоматически анализирует дату.
(5) Метод временной метки анализа, parseepochmilli*, такой как parseepochmillitodate (строковый текст), дата временного анализа, например, 1590224790000.
(6) Проанализируйте формат даты по умолчанию, ParsededEfaultstr*, такой как ParsededEfaultstrtodate (String Text)
Анализ eee mmm dd hh: мм: ss zzz yyyy, например: сб 23 мая 17:06:30 CST 2020 - это дата.
(7) Пользовательские методы форматирования часового пояса, такие как формат (дата дата, форматат DateTimeFormatter, String ZoneID), дата формата в соответствии с ZoneID.
(8) Настройте метод форматирования шаблона, такой как формат (дата даты, строка DateFormatPattern), дата формата в соответствии с DateFormatPattern.
(9) Пользовательские методы анализа шаблона, такие как ParsetoDate (строковый текст, строка DateFormatPattern), дата формата в соответствии с DateFormatPattern.
(10) Формат по умолчанию времен (YYYY-MM-DD HH: MM: SS.FFFFFFFFFFFFFFFFFFFFFFFFFFFF НАНОСЕКОВЫХ ВЫПОЛНЕНИЯ, Опустите следующий 0) метод форматирования.
Например, FormattimeStampstyle (дата даты).
(11) Формат по умолчанию времен (YYYY-MM-DD HH: MM: SS.FFFFFFFFFFFFFFFFFFFFFFFFFFF-наносекунд, пропуская следующие 0).
Например, parsetimestmpstyletodate (строковый текст).
(12) Методы, чтобы проверить, является ли формат даты правильным, isvaliddate*, например, isvaliddate (строковый текст), проверьте, правильной ли строка формата формата yyyy-mm-dd.
(13) В соответствии с методом анализа матрицы пользовательских шаблонов, таким как ParsetoDate (String Text, String [] DateFormatPatterns), DateFormatPatterns поддерживает несколько шаблонов, и до тех пор, пока один из анализа будет успешной, будет возвращена соответствующая дата.
(14) Анализировать время естественного языка, сегодня, завтра, на следующей неделе, в следующем месяце, в следующем году, вчера, на прошлой неделе, в прошлом месяце, в прошлом году и т. Д., Такие, как ParsenaturallanguageTodate (String Text),
ParsenaturallanguageTodate (String Text, Map <String, String> NaturallanguageMap) поддерживает пользовательские карты времени естественного языка.
(15) Методы форматирования даты Китая, такие как FormattochinesedAtestest (дата дата, логическая изопперказа), Isuppercase false: 11 сентября 2021 г. Верно: 11 сентября 2021 года.
(16) Методы анализа даты Китая, такие как Parsechinesedatestestodate (String Text), поддержка: 11 сентября 2021 года и 11 сентября 2021 г. Анализ даты формата.
ПРИМЕЧАНИЕ. При форматировании и анализе в отличие от часового пояса системы, используйте пользовательский метод форматирования часового пояса, или вы можете использовать метод с сбросом часового пояса, например:
Yyyy_mm_dd_hh_mm_ss_ssss_fmt.withzone (ZoneID.Of ("Europe/Paris").
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: DateTimeFormatterTiltest.
включать:
(1) Создайте календарь на указанное время (календарь, содержащий иерархию года, месяца и дня). GenateCalendar* Например, GenerateCAlendar (int Year, INT Monthy) генерирует календарь на указанный год и месяц.
(2) Сгенерировать календарь указанного времени (календарь, содержащий иерархию года, месяца и дня), включая лунный календарь и все методы отдыха, GenerateCalendarWithholiday*, GenerateCalendarWithholiday (int yen, int month, map <string> localhypemap, map <string> windholiday, map <string> string> intemepemap, map string> map string> map string> map dategemap <string> integemap <string> string> mocolidaymap, map), map <string> stringholidaymap, map). генерирует календарь указанного года и месяца, включая лунный календарь и всю информацию о празднике, а также может настроить праздники, рабочие дни и т. Д.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: Calendarutiltest.
Включать:
(1) Расчет лунной даты, года, месяца и дня.
(2) Рассчитайте знаки зодиака во время лунного календаря.
(3) Расчет двадцати четырех солнечных терминов и т. Д. (4) Примечания о лунном календаре в григорианский календарь: поддерживается только преобразование лунного календаря в григорианском календаре 1900-2100 гг.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: LunardateTest.
Включать:
(1) Рассчитайте григорийские праздники, Getlocalholiday* Например, Getlocalholiday (дата даты) рассчитывает григорианские праздники даты, Getlocalholiday (дата даты, карта <строка, строка> localholidaymap) может пройти в индивидуальные данные Грегории.
(2) Расчет лунных праздников, Getchineseholiday* Например, Getchineseholiday (дата даты) рассчитывает лунный праздник даты, Getchineseholiday (дата даты, карта <строка, строка> китайская holidaymap) может пройти в пользовательских данных Lunar Holiday.
(3) Расчет двадцати четырех солнечных терминов, Getsolarterm* Например, GetSolarterm (дата дата) рассчитывает двадцать четыре солнечных члена даты.
Примечание: Lunardate используется в лунном календаре и двадцать четыре солнечных термина, и поддерживает только расчеты 1900-2100 лет григорианского календаря.
Вы можете просмотреть соответствующие тестовые коды для подробного использования.
Выражение Cron слева направо (разделено пространствами): секунды (0-59) минут (0-59) часов (0-23) Дата (1-31) месяц (целое число 1-12 или ян-дек) неделя (целое число 1-7 или солнце
Специальные символы могут быть использованы для всех полей:, - * / - это перечисление, диапазон, произвольные, интервальные даты и другие:? LW - это любой, последний, действительный рабочий день (с понедельника по пятницу)
Вы также можете использовать неделю:? L # - это любое, и, наконец, выражение Cron обычно используется на неделе каждого месяца:
(1) 0 0 2 1 *? * Указывает запуск в 2 часа ночи 1 -го числа месяца (2) 0 15 10? * Пн-пт указывает, что назначение выполняется в 10:15 в понедельник по пятницу (3) 0 15 10? * 6L 2002-2006 указывает, что назначение выполняется в 10:15 утра в последнюю пятницу каждого месяца с 2002-2006 (4) 0/30 9-17 * *? Указывает каждые полчаса (5) 0 15 10 л *? Указывает запуск в 10:15 утра в последний день каждого месяца (6) 0 15 10? * 6#3 указывает на запуск в 10:15 в третью пятницу каждого месяца (6) 0 15 10? * 6#3 указывает на запуск в 10:15 в третью пятницу каждого месяца (4) 0/30 9-17 * *? Указывает каждые полчаса (5) 0 15 10 л *? Указывает запуск в 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) следующего времени выполнения, GetNextTimeStr и GetNextTimeStRist.
(4) Сравните, равно ли следующее время исполнения выражения Cron равным указанному методу даты, IssatiSfiedby.
Примечание: в базовом слое используется обработка Cronexpression Quartz.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: CronexpressionUtiltest.
Вычислительный инструмент, занимающий много времени, поддерживает секунды, миллисекунды, наносекунд
включать:
(1) Расчет требует времени и возвращает многократные результаты.
(2) Расчет требует времени, настраивает имя задачи и результаты вывода времени.
(3) Время вычисления, вернуть точное время, с 3 десятичными активами, используйте Round_down, чтобы отказаться от десятичных деталей, которые превышают 3 цифры и т. Д.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: CostuitLtest.
Включает функции:
(1) Проанализировать естественный язык времени на основе текущего времени.
(2) Проанализировать естественный язык времени на основе указанного времени.
(3) Добавьте различные методы вызова, такие как параллельное выполнение Parseconcorrent, которое может установить время ожидания и пользовательский пул потоков для повышения эффективности выполнения.
Изменен с https://github.com/shinyke/time-nlp
Некоторые модификации были сделаны следующим образом:
(1) Инкапсулировать атрибуты и переименовать их в соответствии с стандартами именования верблюда.
(2) Измените загрузку регулярного файла ресурсов на загрузку Singleton.
(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 часов утра, поэтому три вечера будут определены как проблема трех PM завтра.
(9) Исправить проблему в оригинальном проекте: исправить проблему исключения десятичного разрешения.
(10) Оптимизация производительности, предварительно отделайте подержанные закономерности и помещайте их в кэш и используйте их непосредственно в следующий раз для повышения производительности.
Примечание: NLP будет иметь определенную частоту отказов распознавания, и он будет продолжать итерацию и улучшать уровень успеха.
Эта функция не включена в мини -версию.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: timenlputiltest.
Константы временного блока, которые облегчают расчет конверсии единицы, например, установление времени кэша на 3 дня: 3*Milliseconds_per_day (24*60*60*1000 миллисекунд в день)
Включать:
(1) Преобразуйте значение базового блока, например, Milliseconds_per_seconds 1000 миллисекунд в секунду.
(2) Преобразовать в основное значение секунд, например, second_per_day Количество секунд в день составляет 24*60*60.
(3) преобразовать в базовое значение миллисекундов, таких как Milliseconds_per_day. Количество миллисекунд в день составляет 24*60*60*1000.
Для получения подробного использования вы можете просмотреть соответствующий тестовый код: xktimeConstantTest.
(1) Форк -проект.
(2) изменить в филиале Dev.
(3) Отправить запрос на развлечение.
(1) Общие праздники, такие как Новый год, весенний фестиваль, фестиваль Цинминга, День труда, фестиваль лодок-драконов, фестиваль в середине осени и другие праздники.
(2) Поддерживается 24 солнечных терминов.