logo

Data i hora de Java

Els paquets java.time, java.util, java.sql i java.text contenen classes per representar la data i l'hora. Les classes següents són importants per tractar la data a Java.

API de data/hora de Java 8

Java ha introduït una nova API de data i hora des de Java 8. El paquet java.time conté classes de data i hora de Java 8.

API de data/hora clàssica

Però també és útil l'API clàssica o antiga de Java Date. Vegem la llista de classes clàssiques de data i hora.

Format de data i hora

Podem formatar la data i l'hora en Java utilitzant les classes següents:

API de data i hora de Java

Java proporciona la funcionalitat de data i hora amb l'ajuda de dos paquets java.time i java.util. El paquet java.time s'introdueix a Java 8, i les classes recentment introduïdes intenten superar les deficiències de les classes heretades java.util.Date i java.util.Calendar.

Classes clàssiques de l'API de data i hora

Les classes principals abans del llançament de Java 8 eren:

quantes ciutats EUA

Java.lang.System: La classe proporciona el mètode currentTimeMillis() que retorna l'hora actual en mil·lisegons. Mostra la data i l'hora actuals en mil·lisegons des de l'1 de gener de 1970.

java.util.Date: S'utilitza per mostrar un instant de temps específic, amb unitat de mil·lisegon.

java.util.Calendar: És una classe abstracta que proporciona mètodes per convertir entre instàncies i manipular els camps del calendari de diferents maneres.

java.text.SimpleDateFormat: És una classe que s'utilitza per formatar i analitzar les dates d'una manera predefinida o un patró definit per l'usuari.

java.util.TimeZone: Representa una compensació de zona horària i també calcula l'horari d'estiu.

Inconvenients de les API de data/hora existents

    Seguretat del fil:Les classes existents, com ara Data i Calendar, no proporcionen seguretat per a fils. Per tant, comporta problemes de concurrència difícils de depurar que els desenvolupadors han de tenir en compte. Les noves API de data i hora de Java 8 proporcionen seguretat en els fils i són immutables, evitant així el problema de concurrència dels desenvolupadors.Disseny de l'API incorrecte:Les API de data i calendari clàssiques no ofereixen mètodes per dur a terme les funcionalitats bàsiques del dia a dia. Les classes de data i hora introduïdes a Java 8 estan centrades en ISO i ofereixen diversos mètodes diferents per realitzar operacions sobre data, hora, durada i períodes.Difícil maneig de la zona horària:Gestionar la zona horària utilitzant les classes clàssiques de Data i Calendar és difícil perquè se suposa que els desenvolupadors n'havien d'escriure la lògica. Amb les noves API, el maneig de la zona horària es pot fer fàcilment amb les API Local i ZonedDate/Time.

Nova API de data i hora a Java 8

La nova API de data ajuda a superar els inconvenients esmentats anteriorment amb les classes heretades. Inclou les següents classes:

java.time.LocalDate: Representa un any-mes-dia al calendari ISO i és útil per representar una data sense hora. Es pot utilitzar per representar només informació d'una data, com ara una data de naixement o una data de casament.

java.time.LocalTime: Tracta només a temps. És útil per representar l'hora del dia basada en humans, com ara l'horari de les pel·lícules o l'hora d'obertura i tancament de la biblioteca local.

java.time.LocalDateTime: Gestiona tant la data com l'hora, sense una zona horària. És una combinació de LocalDate amb LocalTime.

java.time.ZonedDateTime: Combina la classe LocalDateTime amb la informació de zona proporcionada a la classe ZoneId. Representa una marca completa de la data i l'hora juntament amb la informació de la zona horària.

java.time.OffsetTime: Gestiona l'hora amb un desplaçament de zona horària corresponent de Greenwich/UTC, sense un identificador de zona horària.

java.time.OffsetDateTime: Gestiona una data i hora amb un desplaçament de zona horària corresponent de Greenwich/UTC, sense un identificador de zona horària.

java.time.Clock : Proporciona accés a l'instant, la data i l'hora actuals en qualsevol zona horària determinada. Tot i que l'ús de la classe Clock és opcional, aquesta característica ens permet provar el vostre codi per a altres zones horàries, o utilitzant un rellotge fix, on l'hora no canvia.

java.time.Instant : Representa l'inici d'un nanosegon a la línia de temps (des d'EPOCH) i és útil per generar una marca de temps per representar el temps de la màquina. Un instant que passa abans de l'època té un valor negatiu, i un instant que passa després de l'època té un valor positiu.

java.time.Durada : Diferència entre dos instants i mesura en segons o nanosegons i no utilitza construccions basades en dates com ara anys, mesos i dies, tot i que la classe proporciona mètodes que es converteixen en dies, hores i minuts.

java.time.Period : S'utilitza per definir la diferència entre dates en valors basats en dates (anys, mesos, dies).

java.time.ZoneId : Indica un identificador de zona horària i proporciona regles per convertir entre un Instant i un LocalDateTime.

java.time.ZoneOffset : Descriu un desplaçament de zona horària respecte a l'hora de Greenwich/UTC.

java.time.format.DateTimeFormatter : Ofereix diversos formattadors predefinits, o podem definir el nostre. Té el mètode parse() o format() per analitzar i donar format als valors de data i hora.