¡Clase de herramienta de procesamiento de tiempo de Java muy potente!

xk-time es una herramienta para conversión de tiempo, cálculo de tiempo, formateo de tiempo, análisis de tiempo, calendario, expresión cron de tiempo y NLP de tiempo, etc. Utiliza Java8, seguro para subprocesos, simple y fácil de usar, hasta 70 de uso común plantillas de formato de fecha, compatible con la clase de tiempo Java8 y la fecha, ligero, sin dependencias de terceros.

 

¿Por qué desarrollar esta herramienta?

(1) La API de Date antes de Java 8 no está bien diseñada, es incómoda de usar y a menudo ocurren problemas de seguridad de subprocesos.

El kit de herramientas xk-time usa java8 api. Entre ellos, Instant, LocalDate, LocalDateTime, LocalTime, ZonedDateTime, etc. son todas clases seguras para subprocesos, y se agrega un método más rico. Sobre esta base, se desarrollan clases de herramientas relevantes, que son seguro para subprocesos y permite un uso más conveniente.

(2) Common DateUtil a menudo coloca funciones como conversión de tiempo, cálculo, formateo y análisis en la misma clase, lo que resulta en funciones de clase complicadas, demasiados métodos y búsquedas inconvenientes.

El kit de herramientas xk-time divide las funciones anteriores en 3 clases de herramientas según la conversión de tiempo, el cálculo de tiempo y el análisis de formato de tiempo: DateTimeConverterUtil, DateTimeCalculatorUtil, DateTimeFormatterUtil, cada clase solo tiene una función, que es conveniente de usar.

(3) Para integrar las funciones de días festivos, calendario lunar, veinticuatro términos solares, doce constelaciones, doce signos del zodíaco, doce horas y calendarios estrechamente relacionados con el tiempo, se desarrollan en herramientas de fácil uso.

Descripción de la función principal

1. Clase de herramienta de conversión de fecha DateTimeConverterUtil

Incluyendo Date, LocalDate, LocalDateTime, LocalTime, Instant, ZonedDateTime, YearMonth, Timestamp y long.    
Tenga en cuenta que la conversión de ZonedDateTime, especialmente la conversión de otras horas a ZonedDateTime, debe ser coherente con la zona horaria correspondiente.

Para un uso detallado, puede ver el código de prueba relevante.

2. Clase de herramienta de cálculo de fecha DateTimeCalculatorUtil

Incluyendo: 
(1) Obtener método de atributo de tiempo (año de soporte, mes, día, hora, minuto, segundo, milisegundo, semana, marca de tiempo, etc.), obtener * como getYear (Date date) para obtener la parte del año, getMonthCnLong (Date date) para obtener el chino del mes, getDayOfWeekCn (Date date)), obtén el chino de la semana.

(2) Obtenga el tiempo más el método de operación, más * como plusYears (Fecha fecha, largo amountToAdd) El año actual aumenta el valor de amountToAdd.

(3) Obtenga el método de operación de resta de tiempo, menos * como minusYears (Fecha fecha, cantidad larga para restar) El año de tiempo actual reduce el valor de cantidad a restar.

(4) Obtenga el tiempo para modificar el método de atributo, con * como withYear (Date date, long newValue) para modificar el valor del año de tiempo actual a newValue.

(5) Obtenga y compare dos métodos de tiempo, como betweenYears (Date startInclusive, Date endExclusive) Compare dos tiempos y obtenga la parte del año.

(6) Otros métodos de uso común, como isLeapYear (Date date) para determinar si es un año bisiesto, isWeekend (Date date) para determinar si es un fin de semana, isExpiry (String yearMonthStr) si vence, etc.

(7) Método de cálculo de conversión de zona horaria, transform *, como transform (ZonedDateTime zonedDateTime, String zoneId)

(8) Compare dos métodos de igualdad y tamaño de tiempo, compare *, como comparar (Fecha fecha1, Fecha fecha2)

(9) Obtenga el método de hora de inicio preciso, inicio , fin , como startTimeOfMonth () la hora de inicio del mes actual, el primer día del mes + 00:00:00, endTimeOfMonth () el último día del mes + 23:59:59 con precisión de segundos; endAccuracyTimeOf *, precisión de milisegundos (fecha), precisión de nanosegundos (LocalDateTime).

(10) El mismo método de juicio de comparación de mes y día, esSameMonthDay , betweenNextSameMonthDay , nextSameMonthDay *, por ejemplo, para cumpleaños, feriados y otros juicios periódicos de comparación de fechas.

(11) Método de cálculo de la constelación, getConstellation *, como getConstellationNameCn (String monthDayStr), calcula la constelación en función de la fecha.

(12) Calcule la lista de tiempo del año y mes especificados o el intervalo de tiempo de inicio, obtenga * List, como getDateList (int año, int mes), calcule la lista de tiempo del año y mes especificados.

(13) Reduzca el método de precisión de tiempo, reduzcaAccuracyTo *, como reduceAccuracyToDay (Fecha fecha), reduzca la precisión de tiempo a días y agregue 0 a otros, y regrese como 2020-04-23 00:00:00.

(14) Obtenga el método de marca de tiempo, getEpoch *, como getEpochMilli () para obtener la marca de tiempo, getEpochMilliFormat () para obtener la cadena de formato de marca de tiempo (aaaa-MM-dd HH: mm: ss)

(15) Método de cálculo de edad, getAge *, como getAge (Date birthDay), calcula la edad por cumpleaños.

(16) El método para juzgar si es un cumpleaños, esBirthDay *, como isBirthDay (Date birthDay), para juzgar si la fecha actual es el cumpleaños de acuerdo con el cumpleaños.

(17) El método de cálculo del número de semana, weekof *, como weekOfMonth (Fecha fecha), la semana del mes donde se encuentra la fecha.

(18) Determine si lunes, viernes, es lunes , es ZhouYi , como isZhouYi (fecha fecha), si es lunes.

(19) El método de cálculo de doce horas, getTwelveTwo *, como getTwelveTwo (Date date), obtiene las doce horas correspondientes a la hora especificada.

(20) Método de cálculo del trimestre, getQuarter *, como getQuarter (Date date), para obtener el trimestre correspondiente al tiempo especificado.

(21) Obtenga el método de hora de inicio preciso del trimestre (cuatro trimestres), startTimeOf * Quarter, como startTimeOfFirstQuarter (int year), obtenga el primer trimestre del año especificado.

(22) Obtenga el método exacto de hora de inicio del año, startTimeOfYear, como startTimeOfYear (int year), obtenga la hora de inicio del año especificado.

(23) Los métodos habituales de cálculo de tiempo (mañana, la semana que viene, el mes próximo, el año próximo, etc.), como mañana (), calculan mañana y la fecha de retorno.

(24) Modifique el método del valor de la semana conDayOfWeek *, como withDayOfWeek (Date date, long newValue), modifique el día de la semana al valor especificado newValue y devuelva la fecha.

(25) Cálculo del día laborable chino (incluida la información de vacaciones), incluidos métodos para determinar si la fecha actual es un día laborable y el siguiente día laborable, isChineseWorkDay , nextChineseWorkDay ,  
como isChineseWorkDay (Date, String holidayData), nextChineseWorkDay (Fecha fecha, String holidayData),  
holidayData. Si los datos de vacaciones no son compatibles con el año, se utilizará de lunes a viernes como días laborables para juzgar.

Para un uso detallado, puede ver el código de prueba relevante.

3. Clase de herramienta de análisis y formato de fecha DateTimeFormatterUtil

Incluya formatos de fecha habituales como: 
aaaa-MM-dd  
HH: mm: ss  
aaaa-MM-dd HH: mm: ss  
aaaa-MM-dd HH: mm: ss.SSS  
aaaa-MM-dd HH: mm: ss. SSSSSS  
aaaa-MM-dd HH: mm: ss.SSSSSSSSS  
aaaa-MM-dd'T'HH: mm: ssZ, etc., admite tiempos precisos como milisegundos, microsegundos y nanosegundos.

(1) Método de formato, formato *, como formatToDateStr (fecha fecha), devuelve la parte de la fecha, como: aaaa-MM-dd;  
formato (fecha fecha, formateador DateTimeFormatter) el formateador puede elegir un formateador definido como AAAA_MM_DD_HH_MM_SS_FMT (aaaa -MM-dd HH: mm: ss) formatea la fecha.

(2) Método de análisis, parse *, por ejemplo, parseDateStrToDate (String text) analiza la fecha yyyy-MM-dd y devuelve Date; 
parseToDate (String text, DateTimeFormatter formatter) analiza en Date según el formateador.

(3) Método de análisis automático, identificación automática y análisis de acuerdo con las características de la cadena, smartParse *, como smartParseToDate (texto de cadena), analizando automáticamente la fecha.

(4) Formato ISO (incluido T) método de análisis automático, identificación automática y análisis de acuerdo con las características de la cadena, parseIso *, como parseIsoToDate (texto de cadena), analizando automáticamente la fecha.

(5) Analice el método de marca de tiempo, parseEpochMilli *, como parseEpochMilliToDate (texto de cadena), y analice la marca de tiempo como Fecha, como 1590224790000.

(6) Analizar el formato predeterminado de Fecha, parseDateDefaultStr *, como parseDateDefaultStrToDate (texto de cadena)  
Analizar EEE MMM dd HH: mm: ss zzz yyyy Por ejemplo: Sábado 23 de mayo 17:06:30 CST 2020 es Fecha.

(7) Métodos de formato de zona horaria personalizados, como formato (fecha fecha, formateador DateTimeFormatter, String zoneId), formato de fecha según zoneId.

(8) Métodos de formato de plantilla personalizados, como formato (Fecha fecha, String dateFormatPattern), formato Fecha según dateFormatPattern.

(9) Métodos de análisis de plantillas personalizados, como parseToDate (String text, String dateFormatPattern), formatea la fecha de acuerdo con dateFormatPattern.

(10) Formato predeterminado de marca de tiempo (aaaa-mm-dd hh: mm: ss.fffffffff donde fffffffff son nanosegundos, omita el siguiente 0) método de formato.   
Por ejemplo, formatTimestampStyle (Fecha fecha).

(11) Formato predeterminado de la marca de tiempo (aaaa-mm-dd hh: mm: ss.fffffffff donde fffffffff son nanosegundos, omita el siguiente 0) método de análisis.   
Por ejemplo, parseTimestampStyleToDate (String text).

(12) El método para verificar si el formato de fecha es correcto, isValidDate *, como isValidDate (String text), para verificar si la cadena de formato aaaa-MM-dd es correcta.

(13) Según el método de análisis de matriz de plantillas personalizadas, como parseToDate (String text, String [] dateFormatPatterns), dateFormatPatterns admite varias plantillas, siempre que una de ellas se analice correctamente, se devolverá la fecha correspondiente.

(14) Analizar el tiempo del lenguaje natural, hoy, mañana, la próxima semana, el próximo mes, el próximo año, ayer, la semana pasada, el mes pasado, el año pasado, etc., como parseNaturalLanguageToDate (String text),  
parseNaturalLanguageToDate (String text, MapnaturalLanguageMap) Admite análisis personalizado del mapa de tiempo en lenguaje natural

Nota: Cuando formatee y analice una hora que sea diferente de la zona horaria del sistema, utilice el método de formateo de la zona horaria personalizada o utilice el método withZone para restablecer la zona horaria, como: 
YYYY_MM_DD_HH_MM_SS_SSS_FMT.withZone (ZoneId.of ("Europa / París")).

Para un uso detallado, puede ver el código de prueba relevante.

4. Clase de herramienta de calendario CalendarUtil

Incluyendo: 
(1) El método de generar un calendario en un momento específico (calendario que contiene una relación jerárquica entre año, mes y día), generateCalendar * Por ejemplo, generateCalendar (int año, int mes) genera un calendario para un año específico y mes.  
(2) Genere un calendario en un momento específico (calendario que incluya la relación jerárquica entre año, mes y día), incluido el calendario lunar y todos los métodos de información de vacaciones, generateCalendarWithHoliday *, que es mejor que generateCalendarWithHoliday (int year, int month, MaplocalHolidayMap , MapchineseHolidayMap, MapdateTypeMap) El calendario mensual contiene el calendario lunar y toda la información de vacaciones, y puede personalizar las vacaciones y los días laborables.

Para un uso detallado, puede ver el código de prueba relevante.

5. Clase de fecha lunar LunarDate

Contiene: 
(1) Cálculo de fecha lunar, año, mes y día. 
(2) Los años del calendario lunar, se calculan los signos del zodíaco. 
(3) Cálculo de veinticuatro términos solares, etc.  
Nota: Solo admite la conversión del calendario gregoriano de 1900 a 2100.

Para un uso detallado, puede ver el código de prueba relevante.

6. Util de vacaciones

Incluya: 
(1) Cálculo de feriados del calendario gregoriano, getLocalHoliday * Por ejemplo, getLocalHoliday (Date date) calcula el feriado gregoriano de la fecha, getLocalHoliday (Date date, MaplocalHolidayMap) puede pasar datos personalizados de feriados gregorianos.  
(2) Cálculo de vacaciones en el calendario chino, getChineseHoliday * Por ejemplo, getChineseHoliday (Date date) calcula las vacaciones lunares de la fecha, getChineseHoliday (Date date, MapchineseHolidayMap) puede pasar datos personalizados de las vacaciones lunares. 
(3) Cálculo de veinticuatro términos solares, getSolarTerm * Por ejemplo, getSolarTerm (Date date) calcula los veinticuatro términos solares de la fecha.

Nota: El calendario lunar y los veinticuatro términos solares utilizan la clase de fecha lunar LunarDate, que solo admite el cálculo del calendario gregoriano de 1900 a 2100.

Para un uso detallado, puede ver el código de prueba relevante.

7. Clase de herramienta de expresión Cron CronExpressionUtil

Expresiones cron de izquierda a derecha (separadas por espacios): segundos (0-59) minutos (0-59) horas (0-23) fecha (1-31) mes (entero de 1-12 o ENE-DIC) Semana ( 1-7 entero o SUN-SAT (1 = SUN)) Año (opcional, 1970-2099)  
Se pueden usar caracteres especiales en todos los campos:, - * / son enumeración, rango, arbitrario,
fecha de intervalo por   separado Disponible :? LW es arbitrario, y finalmente, la semana del día laboral efectivo (de lunes a viernes)  
también se puede usar:? L # son arbitrarios, y finalmente, las primeras semanas de cada mes  
se usan comúnmente expresiones cron: 
(1) 0 0 2 1 *? * ¿Significa activar a las 2 am el 1 de cada mes  
(2) 0 15 10? * LUN-VIE significa ejecutar el trabajo a las 10:15 todos los días de lunes a viernes  
(3) 0 15 10? * 6L 2002- 2006 significa la ejecución a las 10:15 am del último viernes de cada mes de 2002 a 2006  
(4) 0 0/30 9-17 * *? Cada media hora en horario laboral de 9 a 5  
(5) 0 15 10 L *? Se activa a las 10:15 a. M. El último día de cada mes  
(6) 0 15 10? * 6 # 3 Se activa a las 10:15 a. M. El tercer viernes de cada mes

Contiene  
(1) métodos de expresión Cron de validación y formato, isValidExpression y formatExpression. 
(2) Genere el siguiente o más métodos de tiempo de ejecución, getNextTime y getNextTimeList. 
(3) Genere el método de formato de fecha (aaaa-MM-dd HH: mm: ss) del siguiente o más tiempos de ejecución, getNextTimeStr y getNextTimeStrList. 
(4) Compare si el próximo tiempo de ejecución de la expresión Cron es igual al método de fecha especificado, isSatisfiedBy.

Nota: La capa inferior se procesa mediante CronExpression de cuarzo.

Para un uso detallado, puede ver el código de prueba relevante.

8. Calcule CostUtil de la herramienta que consume mucho tiempo

Herramienta de cálculo que consume mucho tiempo, segundos de soporte, milisegundos, nanosegundos

Incluyendo: 
(1) Calcular los resultados que consumen mucho tiempo y devolverlos. 
(2) Calcule las tareas que requieren mucho tiempo, personalice el nombre de la tarea y genere un resultado que requiera mucho tiempo. 
(3) El cálculo requiere mucho tiempo, devuelve tiempos precisos, resultados con 3 decimales y utiliza ROUND_DOWN para descartar decimales que superan los 3 dígitos.

Para un uso detallado, puede ver el código de prueba relevante.

9. Herramienta de análisis del lenguaje natural de Time (NLP) TimeNLPUtil

Funciones incluidas:  
(1) Analizar el lenguaje natural del tiempo basado en el tiempo actual. 
(2) Analice el lenguaje natural del tiempo basado en el tiempo especificado.

Modificado de https://github.com/shinyke/Time-NLP e  
hizo algunas modificaciones de la siguiente manera: 
(1) Encapsule los atributos y cámbieles el nombre para que se ajusten al estándar de denominación de casos de camello. 
(2) Cambie la carga del archivo de recursos regular a carga única. 
(3) Vuelva a dividir las clases en clases separadas según sus funciones. 
(4) Vuelva a escribir usando la API de fecha Java8. 
(5) Agregue notas y optimice el código.  
(6) Corrija los problemas en el proyecto original: hora estándar aaaa-MM-dd, aaaa-MM-dd HH: mm: ss y aaaa-MM-dd HH: mm problemas de análisis.  
(7) Solucione los problemas en el proyecto original: después de 1 hora, 1 hora y media, 1 hora y 50 minutos, etc., el problema de resolución; y soporte a segundos, como 50 segundos, 10 minutos y 30 segundos.    
(8) Repare el problema en el proyecto original: repare la hora actual a las 10 am, luego se reconocerá a las 3 pm como el problema de las 3 pm mañana por la tarde.  
(9) Repare el problema en el proyecto original: repare el problema anormal de análisis decimal.

Nota: la PNL tendrá una cierta tasa de fallos en el reconocimiento y el desarrollo iterativo mejora constantemente la tasa de éxito.

 

Proyecto de instalación

(1) Maven

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

(2) Gradle

compile group: 'com.github.xkzhangsan', name: 'xk-time', version: '3.0.1'  

Nota: Usa Android con precaución. El terminal Android no es compatible con Java 8 porque debe ser compatible con versiones inferiores. Se recomienda seguir usando otras herramientas. Si necesitas las funciones relacionadas con este proyecto, puedes consultar la código fuente para la implementación, o déjeme un mensaje. ¡Gracias por el apoyo!

 

Descarga de código    https://download.csdn.net/download/u011694328/14928138

Supongo que te gusta

Origin blog.csdn.net/u011694328/article/details/113104145
Recomendado
Clasificación