Nueva biblioteca de fecha y hora de Java 8, ¡no me contarás después de leer estos 20 casos! ! !

El manejo de fechas, calendarios y hora de Java siempre ha sido criticado, especialmente su decisión de definir java.util.Date como modificable e implementar SimpleDateFormat para que no sea seguro para subprocesos. Parece que Java se ha dado cuenta de la necesidad de proporcionar un mejor soporte para las funciones de fecha y hora, lo que también es algo bueno para la comunidad que se ha acostumbrado a usar la biblioteca de fecha y hora de Joda. La mayor ventaja de esta nueva biblioteca de fecha y hora es que define claramente algunos conceptos relacionados con la fecha y la hora, por ejemplo, hora instantánea (Instant), duración (duración), fecha (fecha), hora (hora), zona horaria. (Zona horaria) y período (período). Al mismo tiempo, también se basa en algunas de las ventajas de la biblioteca Joda, como la distinción entre la comprensión humana y la máquina de la hora y la fecha. Java 8 todavía usa el sistema de calendario ISO y, a diferencia de sus predecesores, las clases en el paquete java.time son inmutables y seguras para subprocesos. La nueva API de fecha y hora se encuentra en el paquete java.time. Estas son algunas de las clases clave que contiene:

- Instant-it representa la marca de tiempo

- LocalDate: no incluye una fecha en un momento específico, como 2014-01-14. Se puede utilizar para almacenar cumpleaños, aniversarios, fechas de entrada, etc.

- LocalTime: representa la hora sin fecha.

- LocalDateTime: contiene la fecha y la hora, pero aún no hay información de compensación ni zona horaria.

- ZonedDateTime —— Ésta es una fecha y hora completas que incluyen la zona horaria, y la diferencia se basa en UTC / hora media de Greenwich.

La nueva biblioteca también agrega ZoneOffset y Zoned, que pueden brindar un mejor soporte para las zonas horarias. Con el nuevo DateTimeFormatter, el análisis y el formato de fechas también se han vuelto completamente nuevos. Por cierto, escribí este artículo cuando Java estaba a punto de lanzar esta nueva función en este momento el año pasado, por lo que encontrará que el tiempo en el ejemplo sigue siendo el año pasado. Si ejecuta estos ejemplos, los valores que devuelven son definitivamente correctos.

¿Cómo trata Java 8 la hora y la fecha?

Alguien me preguntó cuál es la mejor manera de aprender una nueva biblioteca. Mi respuesta es usarlo así en proyectos reales. Habrá varios requisitos en un proyecto real, lo que incitará a los desarrolladores a explorar e investigar esta nueva biblioteca. En resumen, solo la tarea en sí realmente lo motivará a explorar y aprender. La nueva API de fecha y hora de Java 8 es la misma. Para aprender esta nueva biblioteca de Java 8, aquí he creado 20 ejemplos orientados a tareas. Comencemos con una tarea simple, como cómo usar la biblioteca de fecha y hora de Java 8 para representar el día de hoy, y luego generemos una fecha completa con la hora y la zona horaria, y luego estudiemos cómo completar algunas tareas más prácticas, como Desarrolle una aplicación de recordatorio para averiguar cuántos días quedan antes de algunas fechas específicas, como cumpleaños, aniversarios dominicales, próximos días de facturación, próximas fechas de prima o fechas de vencimiento de tarjetas de crédito.

Ejemplo 1 Cómo obtener la fecha de hoy en Java 8 Existe una clase llamada LocalDate en Java 8, que se puede usar para representar la fecha de hoy. Esta clase es ligeramente diferente de java.util.Date porque solo contiene la fecha, no la hora. Por lo tanto, si solo necesita representar la fecha sin la hora, puede usarla.

LocalDate today = LocalDate.now(); System.out.println("Today's Local date : " + today); 

Output 
Today's Local date : 2014-01-14

Puede ver que creó la fecha de hoy sin información de hora. También formatea la fecha antes de generarla.A diferencia de la clase Date anterior, los datos impresos no están formateados.

Ejemplo 2 Cómo obtener el año, mes y día actuales en Java 8 La clase LocalDate proporciona algunos métodos convenientes que se pueden utilizar para extraer el año, mes, día y otros atributos de fecha. Con estos métodos, puede obtener los atributos de fecha que necesite, en lugar de usar clases como java.util.Calendar:

LocalDate today = LocalDate.now(); 
int year = today.getYear(); 
int month = today.getMonthValue(); 
int day = today.getDayOfMonth(); 
System.out.printf("Year : %d Month : %d day : %d \t %n", year, month, day); 

Output 
Today's Local date : 2014-01-14 
Year : 2014 Month : 1 day : 14 

Como puede ver, obtener información de año y mes en Java 8 es muy simple, solo use el método getter correspondiente, sin necesidad de recordar, muy intuitivo. Puede compararlo con la forma anterior de obtener el año, mes y día actuales en Java.

Ejemplo 3 Cómo obtener una fecha específica en Java 8 En el primer ejemplo, vimos que es muy simple generar la fecha de hoy a través del método estático now (), pero a través de otro método de fábrica muy útil LocalDate.of (), puede crear cualquier fecha, acepta los parámetros de año, mes y día, y luego devuelve una instancia de LocalDate equivalente. La buena noticia de este método es que no comete errores en la API anterior. Por ejemplo, el año solo puede comenzar desde 1900, el mes debe comenzar desde 0, y así sucesivamente. La fecha aquí es lo que escribe. Por ejemplo, en el siguiente ejemplo, representa el 14 de enero. No hay ninguna lógica oculta.

LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); 
System.out.println("Your Date of birth is : " + dateOfBirth); 

Output : Your Date of birth is : 2010-01-14

Se puede ver que la fecha de creación es exactamente la que escribimos, 14 de enero de 2014.

Ejemplo 4 Cómo comprobar si dos fechas son iguales en Java 8 Si se habla de la tarea real de procesar la hora y la fecha en realidad, es común comprobar si dos fechas son iguales. A menudo se puede encontrar para juzgar si hoy es un día especial, como un cumpleaños, un aniversario o un día festivo. A veces, se le dará una fecha para verificar si es un día determinado, como un día festivo. El siguiente ejemplo le ayudará a realizar este tipo de tarea en Java 8. Como era de esperar, LocalDate anula el método equals para comparar fechas, como se muestra a continuación:

LocalDate date1 = LocalDate.of(2014, 01, 14); if(date1.equals(today)){ 
    System.out.printf("Today %s and date1 %s are same date %n", today, date1); 
} 

Output 
today 2014-01-14 and date1 2014-01-14 are same date

En este ejemplo, las dos fechas que comparamos son iguales. Al mismo tiempo, si obtiene una cadena de fecha formateada en el código, debe analizarla en una fecha antes de poder compararla. Puede comparar este ejemplo con la forma de comparar fechas antes de Java, y encontrará que es realmente genial.

Ejemplo 5 Cómo verificar eventos recurrentes en Java 8, como cumpleaños . Otra tarea real relacionada con la hora y la fecha en Java es verificar eventos recurrentes, como el día de facturación mensual, el aniversario de bodas y el día de pago mensual O los días en que se pagan las primas de seguro cada año. Si trabaja en una empresa de comercio electrónico, entonces debe haber un módulo de este tipo, que enviará deseos de cumpleaños a los usuarios y les enviará saludos en cada feriado importante, como Navidad, Acción de Gracias o en la India. Es Deepawali (Deepawali). ¿Cómo determinar si es un día festivo o un evento que se repite en Java? Utilice la clase MonthDay. Esta clase es una combinación de mes y día y no contiene información sobre el año, lo que significa que puede usarla para representar algunos días que se repiten cada año. Por supuesto, hay algunas otras combinaciones, como la clase YearMonth. Es inmutable y seguro para subprocesos como otras clases en la nueva biblioteca de fecha y hora, y también es una clase de valor. Tomemos un ejemplo para ver cómo usar MonthDay para verificar una fecha duplicada:

LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); 
MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth()); 
MonthDay currentMonthDay = MonthDay.from(today); 
if(currentMonthDay.equals(birthday)){ 
    System.out.println("Many Many happy returns of the day !!"); 
}else{ 
    System.out.println("Sorry, today is not your birthday"); 
} 

Output: Many Many happy returns of the day !!

Aunque el año es diferente, hoy es el día del cumpleaños, por lo que verás un saludo de cumpleaños en la salida. Puede ajustar la hora del sistema y ejecutar este programa para ver si puede recordarle cuándo es su próximo cumpleaños. También puede intentar escribir una prueba de unidad JUnit con su próximo cumpleaños para ver si el código se ejecuta correctamente.

Ejemplo 6 Cómo obtener la hora actual en Java 8

Esto es muy similar a obtener la fecha actual en el primer ejemplo. Esta vez usamos una clase llamada LocalTime, que es una hora sin fecha y es un pariente cercano de LocalDate. Aquí también puede usar el método de fábrica estática ahora () para obtener la hora actual. El formato predeterminado es hh: mm: ss: nnn, donde nnn son nanosegundos. Puede compararlo con cómo obtener la hora actual antes de Java 8.

LocalTime time = LocalTime.now(); System.out.println("local time now : " + time);

Output 
local time now : 16:33:33.369 // in hour, minutes, seconds, nano seconds

Como puede ver, la hora actual no contiene la fecha, porque LocalTime solo tiene hora y no tiene fecha.

Ejemplo 7 Cómo aumentar el número de horas en el tiempo Muchas veces necesitamos sumar horas, minutos o segundos para calcular el tiempo futuro. Java 8 no solo proporciona clases inmutables y seguras para subprocesos, sino que también proporciona algunos métodos más convenientes como plusHours () para reemplazar el método add () original. Por cierto, estos métodos devuelven una referencia a una nueva instancia de LocalTime, porque LocalTime es inmutable, así que no olvide almacenar esta nueva referencia.

LocalTime time = LocalTime.now(); 
LocalTime newTime = time.plusHours(2); // adding two hours 
System.out.println("Time after 2 hours : " + newTime); 

Output : 
Time after 2 hours : 18:33:33.369

Puede ver que la hora actual es 16: 33: 33.369 2 horas después. Ahora puede compararlo con la antigua forma de aumentar o disminuir las horas en Java. Puede saber de un vistazo cuál es mejor.

Ejemplo 8 Cómo obtener la fecha 1 semana después Esto es similar al ejemplo anterior de obtener la hora 2 horas más tarde, aquí aprenderemos cómo obtener la fecha 1 semana después. LocalDate se usa para representar una fecha sin hora. Tiene un método plus () que se puede usar para agregar días, semanas o meses, y ChronoUnit se usa para representar esta unidad de tiempo. Dado que LocalDate también es inmutable, cualquier operación de modificación devolverá una nueva instancia, así que no olvide guardarla.

LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); 
System.out.println("Today is : " + today); 
System.out.println("Date after 1 week : " + nextWeek); 


Output: 
Today is : 2014-01-14 
Date after 1 week : 2014-01-21

Puede ver cuál es la fecha después de 7 días, que es una semana después. Puede utilizar este método para agregar un mes, un año, una hora, un minuto o incluso diez años. Consulte la clase ChronoUnit en la API de Java para ver más opciones.

Ejemplo 9 Fecha de alrededor de un año Esta es una continuación del ejemplo anterior. En el ejemplo anterior, aprendimos cómo usar el método plus () de LocalDate para agregar un día, semana o mes a una fecha. Ahora aprendamos a usar el método minus () para encontrar el día hace un año.

LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); 
System.out.println("Date before 1 year : " + previousYear); 
LocalDate nextYear = today.plus(1, YEARS); 
System.out.println("Date after 1 year : " + nextYear); 

Output: 
Date before 1 year : 2013-01-14 
Date after 1 year : 2015-01-14

Se puede observar que son dos años en total, uno es 2013 y el otro es 2015, que son los años antes y después de 2014.

Ejemplo 10 Uso del reloj en Java 8 Java 8 viene con una clase Clock, puede usarla para obtener la hora, fecha u hora actual instantánea en una determinada zona horaria. Puede usar Clock para reemplazar los métodos System.currentTimeInMillis () y TimeZone.getDefault ().

// Returns the current time based on your system clock and set to UTC. 
Clock clock = Clock.systemUTC(); 
System.out.println("Clock : " + clock); 

// Returns time based on system clock zone Clock defaultClock = 
Clock.systemDefaultZone(); 
System.out.println("Clock : " + clock); 

Output: 
Clock : SystemClock[Z] 
Clock : SystemClock[Z]

Puede usar la fecha especificada para comparar con este reloj, como el siguiente:

public class MyClass { 
    private Clock clock; // dependency inject ... 

    public void process(LocalDate eventDate) { 

        if(eventDate.isBefore(LocalDate.now(clock)) { 
            ... 
        } 
    } 
}

Esto es muy conveniente si necesita procesar fechas en diferentes zonas horarias.

Ejemplo 11 Cómo juzgar si una fecha determinada es anterior o posterior a otra fecha en Java Esta también es una tarea común en proyectos reales. ¿Cómo juzga si una fecha determinada es anterior o posterior a otra fecha, o si es exactamente igual? En Java 8, la clase LocalDate tiene métodos isBefore () e isAfter () que se pueden usar para comparar dos fechas. Si la fecha en la que se llama al método es anterior a la fecha dada, el método isBefore () devolverá verdadero.

LocalDate tomorrow = LocalDate.of(2014, 1, 15); 、if(tommorow.isAfter(today)){ 
    System.out.println("Tomorrow comes after today"); 
} 
LocalDate yesterday = today.minus(1, DAYS); 
if(yesterday.isBefore(today)){ 
    System.out.println("Yesterday is day before today"); 
} 

Output: 
Tomorrow comes after today 
Yesterday is day before today

Puede ver que la comparación de fechas en Java 8 es muy simple. No es necesario utilizar otra clase como Calendario para realizar tareas similares.

Ejemplo 12 Manejo de diferentes zonas horarias en Java 8 Java 8 no solo separa la fecha y la hora, sino también la zona horaria. Ya existen varios conjuntos de clases relacionadas con las zonas horarias. Por ejemplo, ZoneId representa una zona horaria específica y ZonedDateTime representa la hora con una zona horaria. Es equivalente a la clase GregorianCalendar antes de Java 8. Con esta clase, puede convertir la hora local a la hora correspondiente en otra zona horaria, como en el siguiente ejemplo:

// Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York"); 
LocalDateTime localtDateAndTime = LocalDateTime.now(); 
ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america ); 
System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork); 

Output : 
Current date and time in a particular timezone : 2014-01-14T16:33:33.373-05:00[America/New_York]

Puede compararlo con el método anterior para convertir la hora local a la hora GMT. Por cierto, al igual que antes de Java 8, no se equivoque con el texto correspondiente a la zona horaria, de lo contrario se encontrará con una excepción de este tipo:

Exception in thread "main" java.time.zone.ZoneRulesException: Unknown time-zone ID: ASIA/Tokyo
        at java.time.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:272)
        at java.time.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:227)
        at java.time.ZoneRegion.ofId(ZoneRegion.java:120)
        at java.time.ZoneId.of(ZoneId.java:403)
        at java.time.ZoneId.of(ZoneId.java:351)  

Ejemplo 13 Cómo representar una fecha fija, como la hora de vencimiento de una tarjeta de crédito. Así como MonthDay representa un día recurrente, YearMonth es otra combinación, que representa la fecha de pago de una tarjeta de crédito, la fecha de vencimiento de un depósito fijo y opciones para Fechas de este tipo. Puede usar esta clase para averiguar cuántos días hay en ese mes. El método lengthOfMonth () devuelve cuántos días hay en esta instancia YearMonth. Esto es muy útil para verificar si febrero son 28 días o 29 días.

YearMonth currentYearMonth = YearMonth.now(); System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth()); 
YearMonth creditCardExpiry = YearMonth.of(2018, Month.FEBRUARY); 
System.out.printf("Your credit card expires on %s %n", creditCardExpiry); 

Output: 
Days in month year 2014-01: 31 
Your credit card expires on 2018-02  

Ejemplo 14 Cómo comprobar si hay un año bisiesto en Java 8. La clase LocalDate tiene un método isLeapYear () que devuelve si el año correspondiente al LocalDate actual es un año bisiesto. Si desea reinventar la rueda, puede echar un vistazo a este código, que está escrito exclusivamente en Java para determinar si un año es bisiesto.

if(today.isLeapYear()){ 
    System.out.println("This year is Leap year"); 
}else { 
    System.out.println("2014 is not a Leap year"); 
} 


Output: 2014 is not a Leap year

Puede verificar algunos años más para ver si los resultados son correctos. Es mejor escribir una prueba unitaria para evaluar los años normales y los años bisiestos.

Ejemplo 15 ¿Cuántos días y meses hay entre dos fechas? Otra tarea común es calcular cuántos días, semanas o años hay entre dos fechas determinadas. Puede utilizar la clase java.time.Period para realizar esta función. En el siguiente ejemplo, calcularemos un total de varios meses antes de la fecha actual y una fecha en el futuro.

LocalDate java8Release = LocalDate.of(2014, Month.MARCH, 14); 
Period periodToNextJavaRelease = 
Period.between(today, java8Release); 
System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths() ); 

Output: 
Months left between today and Java 8 release : 2

Como puede ver, este mes es enero y la fecha de lanzamiento de Java 8 es marzo, por lo que hay dos meses de diferencia.

Ejemplo 16 Fecha y hora con desplazamiento de zona horaria En Java 8, puede usar la clase ZoneOffset para representar una determinada zona horaria. Por ejemplo, India es GMT o UTC5: 30, puede usar su método estático ZoneOffset.of () para Obtenga la zona horaria correspondiente. Siempre que se obtenga el desplazamiento, puede crear un OffsetDateTime tomando LocalDateTime y el desplazamiento.

LocalDateTime datetime = LocalDateTime.of(2014, Month.JANUARY, 14, 19, 30); 
ZoneOffset offset = ZoneOffset.of("+05:30"); 
OffsetDateTime date = OffsetDateTime.of(datetime, offset); 
System.out.println("Date and Time with timezone offset in Java : " + date); 

Output : 
Date and Time with timezone offset in Java : 2014-01-14T19:30+05:30

Puede ver que la hora y la fecha actuales están asociadas con la zona horaria. Otro punto es que OffSetDateTime es principalmente para que lo entiendan las máquinas. Si es para que la gente lo vea, puede usar la clase ZoneDateTime.

Ejemplo 17 Cómo obtener la marca de tiempo actual en Java 8 Si recuerda cómo obtener la marca de tiempo actual antes de Java 8, ahora esto es muy sencillo. La clase Instant tiene un método de fábrica estático now () que puede devolver la marca de tiempo actual, de la siguiente manera:

Instant timestamp = Instant.now(); 
System.out.println("What is value of this instant " + timestamp); 

Output : 
What is value of this instant 2014-01-14T08:33:33.379Z

Se puede ver que la marca de tiempo actual contiene fecha y hora, que es muy similar a java.util.Date. De hecho, Instant es la fecha anterior a Java 8. Puede usar los métodos en estas dos clases para especificar entre estos dos tipos. Por ejemplo, Date.from (Instant) se usa para convertir Instant a java.util.Date, y Date.toInstant () se usa para convertir Date a Instant.

Ejemplo 18 Cómo usar un formateador predefinido para analizar / formatear la fecha en Java 8. Antes de Java 8, el formateo de la hora y la fecha era una habilidad técnica. Nuestro buen socio SimpleDateFormat no es seguro para subprocesos, pero si lo usa Formatear como una variable local es un poco engorroso. Gracias a las variables locales de subprocesos, esto lo hace útil en entornos multiproceso, pero Java ha mantenido este estado durante mucho tiempo. Esta vez presenta un nuevo formateador de fecha y hora seguro para subprocesos. También viene con algunos formateadores predefinidos, incluidos los formatos de fecha de uso común. Por ejemplo, en este ejemplo, usamos el formato BASIC_ISO_DATE predefinido, que formateará el 14 de febrero de 2014 en 20140114.

String dayAfterTommorrow = "20140116"; 
LocalDate formatted = LocalDate.parse(dayAfterTommorrow, 
DateTimeFormatter.BASIC_ISO_DATE); 
System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted); 

Output : 
Date generated from String 20140116 is 2014-01-16

Puede ver que la fecha generada coincide con el valor de la cadena especificada, pero el formato de fecha es ligeramente diferente.

Ejemplo 19 Cómo usar un formateador personalizado para analizar fechas en Java En el ejemplo anterior, usamos el formateador de fecha y hora incorporado para analizar cadenas de fechas. Por supuesto, el formateador predefinido es realmente bueno, pero a veces es posible que deba usar un formato de fecha personalizado. En este momento, debe crear una instancia de formateador de fecha personalizado usted mismo. El formato de fecha en el ejemplo siguiente es "MMM dd aaaa". Puede pasar cualquier patrón al método estático ofPattern () de DateTimeFormatter, y devolverá una instancia. El literal de este patrón es el mismo que en el ejemplo anterior. Por ejemplo, M todavía representa el mes y m sigue siendo el minuto. El modo no válido arrojará DateTimeParseException, pero si es un error lógico, por ejemplo, cuando se debe usar M, se usa m, por lo que no hay forma.

String goodFriday = "Apr 18 2014"; 
try { 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy");     
    LocalDate holiday = LocalDate.parse(goodFriday, formatter); 
    System.out.printf("Successfully parsed String %s, date is %s%n", goodFriday, holiday); 
} catch (DateTimeParseException ex) { 
    System.out.printf("%s is not parsable!%n", goodFriday); 
    ex.printStackTrace(); 
} 

Output : 
Successfully parsed String Apr 18 2014, date is 2014-04-18

Puede ver que el valor de la fecha coincide con la cadena pasada, pero el formato es diferente.

Ejemplo 20 Cómo formatear fechas en Java 8 y convertirlas en cadenas En los dos ejemplos anteriores, aunque usamos la clase DateTimeFormatter, principalmente analizamos cadenas de fechas. En este ejemplo, lo que vamos a hacer es todo lo contrario. Aquí tenemos una instancia de la clase LocalDateTime, queremos convertirla en una cadena de fecha formateada. Esta es, con mucho, la forma más fácil y conveniente de convertir fechas en cadenas en Java. El siguiente ejemplo devolverá una cadena formateada. Al igual que en el ejemplo anterior, todavía necesitamos usar la cadena de patrón especificada para crear una instancia de la clase DateTimeFormatter, pero no es el método de análisis de la clase LocalDate el que se llama, sino su método format (). Este método devuelve una cadena que representa la fecha actual y el patrón correspondiente se define en la instancia de DateTimeFormatter pasada.

LocalDateTime arrivalDate = LocalDateTime.now(); 
try { 
    DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm a"); 
    String landing = arrivalDate.format(format); 
    System.out.printf("Arriving at : %s %n", landing); 
    } catch (DateTimeException ex) { 
    System.out.printf("%s can't be formatted!%n", arrivalDate); 
    ex.printStackTrace(); 
} 

Output : Arriving at : Jan 14 2014 04:33 PM

Se puede ver que la hora actual está representada por el modo "MMM dd aaaa hh: mm a", que incluye el mes representado por tres letras y la hora representada por AM y PM.

Varios puntos clave de la API de fecha y hora en Java 8

Después de leer estos ejemplos, creo que tiene una cierta comprensión de la nueva API de fecha y hora en Java 8. Ahora revisemos algunos de los elementos clave de esta nueva API.

  1. Proporciona javax.time.ZoneId para manejar la zona horaria.

  2. Proporciona clases LocalDate y LocalTime

  3. Todas las clases en la nueva API de fecha y hora en Java 8 son inmutables y seguras para subprocesos. Esto es lo opuesto a la API de fecha y calendario anterior, donde las clases clave como java.util.Date y SimpleDateFormat son todas No es seguro para subprocesos.

  4. Un punto importante en la nueva API de fecha y hora es que define claramente los conceptos básicos de fecha y hora, por ejemplo, hora instantánea, duración, fecha, hora, zona horaria y período de tiempo. Todos se basan en el sistema de calendario ISO.

  5. Todo desarrollador de Java debe conocer al menos estas cinco clases en este nuevo conjunto de API: - Instantáneo Representa la marca de tiempo, como 2014-01-14T02: 20: 13.592Z, que se puede obtener de java.time.Clock Consígalo en la clase, así: Instant current = Clock.system (ZoneId.of ("Asia / Tokio")). Instant (); - LocalDate Representa una fecha sin hora, como 2014-01-14. Se puede utilizar para almacenar cumpleaños, aniversarios, fechas de entrada, etc. - LocalTime - Significa la hora sin fecha - LocalDateTime - Contiene la hora y la fecha, pero sin compensación con la zona horaria - ZonedDateTime - Esta es una hora completa con zona horaria, se basa en UTC / Greenwich Mean Time Para ajustar la zona horaria

  6. El paquete principal de esta biblioteca es java.time, que contiene clases que representan la fecha, la hora, el instante y la duración. Tiene dos subpaquetes, uno es java.time.foramt, es obvio para qué sirve, y el otro es java.time.temporal, que puede acceder a varios campos desde un nivel inferior.

  7. La zona horaria se refiere a áreas de la tierra que comparten la misma hora estándar. Cada zona horaria tiene un identificador único, así como un formato de región / ciudad (Asia / Tokio) y una diferencia horaria de la hora media de Greenwich. Por ejemplo, la hora de compensación en Tokio es +09: 00.

  8. La clase OffsetDateTime en realidad contiene LocalDateTime y ZoneOffset. Se utiliza para representar una fecha completa (año, mes, día) y la hora (horas, minutos, segundos, nanosegundos), incluida la diferencia con la hora media de Greenwich (+/- horas: minutos, como +06: 00 o -08: 00). .

  9. La clase DateTimeFormatter se utiliza para formatear y analizar fechas en Java. A diferencia de SimpleDateFormat, es inmutable y seguro para subprocesos, y se puede asignar a una variable estática si es necesario. La clase DateTimeFormatter proporciona muchos formateadores predefinidos y también puede personalizar el formato que desee. Por supuesto, de acuerdo con la convención, también tiene un método parse () para convertir una cadena en una fecha. Si ocurre algún error durante la conversión, lanzará una DateTimeParseException. De manera similar, la clase DateFormatter también tiene un método format () para formatear fechas. Si falla, lanzará una DateTimeException.

  10. Permítanme decir otra oración. Los dos formatos de fecha de "MMM dd aaaa" y "MMm dd aaaa" también son ligeramente diferentes. El primero puede reconocer las dos cadenas "2 de enero de 2014" y "14 de enero de 2014", y si el último se pasa en Si es "2 de enero de 2014", informará un error porque espera que se pasen dos caracteres en el mes. Para resolver este problema, cuando el día es de un solo dígito, debe agregar ceros al frente, por ejemplo, "2 de enero de 2014" debe cambiarse a "2 de enero de 2014".

Eso es todo sobre Java 8, esta nueva API de fecha y hora. Estos breves ejemplos son suficientes para comprender algunas de las nuevas clases de esta nueva API. Dado que se explica en función de tareas reales, no es necesario que mire a su alrededor cuando se encuentre con el procesamiento de fecha y hora en Java más adelante. Aprendimos a crear y modificar instancias de fecha. También entendemos la diferencia entre fecha pura, fecha más hora, fecha más zona horaria, cómo comparar dos fechas, cómo encontrar un día determinado con una fecha específica, como el próximo cumpleaños, aniversario o fecha de seguro. También aprendimos cómo analizar y formatear fechas de una manera segura para subprocesos en Java 8, sin usar variables locales de subprocesos o bibliotecas de terceros. La nueva API puede manejar cualquier tarea relacionada con la fecha y la hora.

Al final

Los estudiantes que quieran aprender java pueden responder a la información mediante un mensaje privado para recibir un resumen de las preguntas de la entrevista de Java de los fabricantes de primera línea + manual de Alibaba Taishan + guía de aprendizaje y pensamiento para cada punto de conocimiento + un resumen de los puntos de conocimiento básicos de Java en un documento pdf de 300 páginas.

El contenido de estos materiales son todos los puntos de conocimiento que el entrevistador debe preguntar durante la entrevista. El capítulo incluye muchos puntos de conocimiento, incluidos conocimientos básicos, colecciones de Java, JVM, concurrencia multiproceso, principios de primavera, microservicios, Netty y RPC, Kafka , Diario, patrón de diseño, algoritmo Java, base de datos, Zookeeper, caché distribuida, estructura de datos, etc. expediente

Supongo que te gusta

Origin blog.csdn.net/weixin_46577306/article/details/108189065
Recomendado
Clasificación