Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java 8: La Nueva y Robusta API de Fecha y Hora

Java 8 introduce una nueva API de Fecha-Hora (java.time) para solucionar las deficiencias de la API antigua (java.util.Date, Calendar):

Paquete principal: java.time. Clases clave:

API Local Date-Time

LocalDate, LocalTime y LocalDateTime simplifican el desarrollo donde no se requieren zonas horarias.

Crea el siguiente programa en C:\JAVA.

Java8Tester.java

Demo en vivo
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testLocalDateTime();
    }

    public void testLocalDateTime() {
        // Obtener fecha y hora actual
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("FechaHora actual: " + currentTime);

        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("date1: " + date1);

        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();
        System.out.println("Mes: " + month + " día: " + day + " segundos: " + seconds);

        // Modificar fecha: día 10, año 2012
        LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
        System.out.println("date2: " + date2);

        // 12 diciembre 2014
        LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
        System.out.println("date3: " + date3);

        // 22:15
        LocalTime date4 = LocalTime.of(22, 15);
        System.out.println("date4: " + date4);

        // Parsear cadena
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("date5: " + date5);
    }
}

Verificar el Resultado

C:\JAVA>javac Java8Tester.java
C:\JAVA>java Java8Tester

Salida esperada (varía según fecha de ejecución):

FechaHora actual: 2014-12-09T11:00:45.457
date1: 2014-12-09
Mes: DECEMBER día: 9 segundos: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

API Zoned Date-Time

Usar cuando se requiera considerar zona horaria.

Java8Tester.java

Demo en vivo
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testZonedDateTime();
    }

    public void testZonedDateTime() {
        ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]");
        System.out.println("date1: " + date1);

        ZoneId id = ZoneId.of("Europe/Paris");
        System.out.println("ZoneId: " + id);

        ZoneId currentZone = ZoneId.systemDefault();
        System.out.println("Zona actual: " + currentZone);
    }
}

Verificar el Resultado

C:\JAVA>javac Java8Tester.java
C:\JAVA>java Java8Tester

Salida esperada:

date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
Zona actual: Etc/UTC

Enum ChronoUnit

java.time.temporal.ChronoUnit reemplaza los valores enteros usados en la API antigua para representar día, mes, etc.

Java8Tester.java

Demo en vivo
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testChromoUnits();
    }

    public void testChromoUnits() {
        LocalDate today = LocalDate.now();
        System.out.println("Fecha actual: " + today);

        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("Próxima semana: " + nextWeek);

        LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
        System.out.println("Próximo mes: " + nextMonth);

        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("Próximo año: " + nextYear);

        LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
        System.out.println("Dentro de diez años: " + nextDecade);
    }
}

Verificar el Resultado

Fecha actual: 2014-12-10
Próxima semana: 2014-12-17
Próximo mes: 2015-01-10
Próximo año: 2015-12-10
Dentro de diez años: 2024-12-10

Period y Duration

Dos clases especializadas para diferencias temporales:

Java8Tester.java

Demo en vivo
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testPeriod();
        java8tester.testDuration();
    }

    public void testPeriod() {
        LocalDate date1 = LocalDate.now();
        System.out.println("Fecha actual: " + date1);

        LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
        System.out.println("Próximo mes: " + date2);

        Period period = Period.between(date2, date1);
        System.out.println("Periodo: " + period);
    }

    public void testDuration() {
        LocalTime time1 = LocalTime.now();
        Duration twoHours = Duration.ofHours(2);
        LocalTime time2 = time1.plus(twoHours);
        Duration duration = Duration.between(time1, time2);
        System.out.println("Duración: " + duration);
    }
}

Verificar el Resultado

Fecha actual: 2014-12-10
Próximo mes: 2015-01-10
Periodo: P-1M
Duración: PT2H

Ajustadores Temporales (TemporalAdjusters)

TemporalAdjuster permite realizar cálculos de fechas complejos: "segundo sábado del mes", "próximo martes", etc.

Java8Tester.java

Demo en vivo
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testAdjusters();
    }

    public void testAdjusters() {
        LocalDate date1 = LocalDate.now();
        System.out.println("Fecha actual: " + date1);

        // Próximo martes
        LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
        System.out.println("Próximo martes: " + nextTuesday);

        // Segundo sábado del mes actual
        LocalDate firstInMonth = LocalDate.of(date1.getYear(), date1.getMonth(), 1);
        LocalDate secondSaturday = firstInMonth.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
                                               .with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        System.out.println("Segundo sábado: " + secondSaturday);
    }
}

Verificar el Resultado

Fecha actual: 2014-12-10
Próximo martes: 2014-12-16
Segundo sábado: 2014-12-13

Compatibilidad Hacia Atrás

Se añade toInstant() a Date y Calendar para convertirlos a la nueva API. Usa ofInstant(Instant, ZoneId) para obtener LocalDateTime o ZonedDateTime.

Java8Tester.java

Demo en vivo
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testBackwardCompatability();
    }

    public void testBackwardCompatability() {
        Date currentDate = new Date();
        System.out.println("Fecha actual (Date): " + currentDate);

        Instant now = currentDate.toInstant();
        ZoneId currentZone = ZoneId.systemDefault();

        LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
        System.out.println("LocalDateTime: " + localDateTime);

        ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
        System.out.println("ZonedDateTime: " + zonedDateTime);
    }
}

Verificar el Resultado

Fecha actual (Date): Wed Dec 10 05:44:06 UTC 2014
LocalDateTime: 2014-12-10T05:44:06.635
ZonedDateTime: 2014-12-10T05:44:06.635Z[Etc/UTC]

Java

  1. Guía Completa de Fecha y Hora en C++
  2. Obtener la Fecha y Hora Actual en Python: Guía Práctica
  3. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  4. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  5. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  6. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  7. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  8. Dominando Fecha y Hora en Java: Constructores, Métodos y Mejores Prácticas
  9. Java 10 estrena versionado basado en tiempo para actualizaciones bianuales predecibles
  10. Java 10: 70+ Nuevas APIs y Características Explicadas
  11. Java 9 (JDK 9) – Características y Beneficios Clave