Java: fecha y hora

Java proporciona la Date clase disponible en java.util paquete, esta clase encapsula la fecha y hora actuales.

La clase Date admite dos constructores como se muestra en la siguiente tabla.

No Señor. Constructor y descripción
1

Date( )

Este constructor inicializa el objeto con la fecha y hora actuales.

2

Date(long millisec)

Este constructor acepta un argumento que es igual al número de milisegundos que han transcurrido desde la medianoche del 1 de enero de 1970.

A continuación se muestran los métodos de la clase de fecha.

No Señor. Método y descripción
1

boolean after(Date date)

Devuelve true si el objeto Date que invoca contiene una fecha posterior a la especificada por date; de ​​lo contrario, devuelve false.

2

boolean before(Date date)

Devuelve verdadero si el objeto Date que invoca contiene una fecha anterior a la especificada por fecha; de lo contrario, devuelve falso.

3

Object clone( )

Duplica el objeto Date que invoca.

4

int compareTo(Date date)

Compara el valor del objeto que invoca con el de la fecha. Devuelve 0 si los valores son iguales. Devuelve un valor negativo si el objeto que invoca es anterior a la fecha. Devuelve un valor positivo si el objeto que invoca es posterior a la fecha.

5

int compareTo(Object obj)

Funciona de forma idéntica a compareTo (Date) si obj es de la clase Date. De lo contrario, arroja una ClassCastException.

6

boolean equals(Object date)

Devuelve verdadero si el objeto Date que invoca contiene la misma hora y fecha que el especificado por fecha; de lo contrario, devuelve falso.

7

long getTime( )

Devuelve el número de milisegundos que han transcurrido desde el 1 de enero de 1970.

8

int hashCode( )

Devuelve un código hash para el objeto que lo invoca.

9

void setTime(long time)

Establece la fecha y la hora especificadas por la hora, que representa un tiempo transcurrido en milisegundos desde la medianoche del 1 de enero de 1970.

10

String toString( )

Convierte el objeto Date que invoca en una cadena y devuelve el resultado.

Obtener fecha y hora actuales

Este es un método muy sencillo para obtener la fecha y hora actual en Java. Puede usar un objeto Date simple con el método toString () para imprimir la fecha y hora actual de la siguiente manera:

Ejemplo

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date using toString()
      System.out.println(date.toString());
   }
}

Esto producirá el siguiente resultado:

Salida

on May 04 09:51:52 CDT 2009

Comparación de fechas

A continuación se muestran las tres formas de comparar dos fechas:

  • Puede usar getTime () para obtener el número de milisegundos que han transcurrido desde la medianoche del 1 de enero de 1970 para ambos objetos y luego comparar estos dos valores.

  • Puede utilizar los métodos before (), after () y equals (). Debido a que el día 12 del mes es anterior al 18, por ejemplo, new Date (99, 2, 12) .before (new Date (99, 2, 18)) devuelve verdadero.

  • Puede utilizar el método compareTo (), que está definido por la interfaz Comparable e implementado por Date.

Formato de fecha usando SimpleDateFormat

SimpleDateFormat es una clase concreta para formatear y analizar fechas de una manera sensible a la configuración regional. SimpleDateFormat le permite comenzar eligiendo cualquier patrón definido por el usuario para el formato de fecha y hora.

Ejemplo

import java.util.*;
import java.text.*;

public class DateDemo {

   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}

Esto producirá el siguiente resultado:

Salida

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Códigos de formato de formato de fecha simple

Para especificar el formato de hora, utilice una cadena de patrón de tiempo. En este patrón, todas las letras ASCII se reservan como letras de patrón, que se definen de la siguiente manera:

Personaje Descripción Ejemplo
GRAMO Designador de era ANUNCIO
y Año en cuatro dígitos 2001
METRO Mes del año Julio o 07
re Día en mes 10
h Hora en AM / PM (1 ~ 12) 12
H Hora del día (0 ~ 23) 22
metro Minuto en hora 30
s Segundo en minuto 55
S Milisegundo 234
mi Día de la semana martes
re Día del año 360
F Día de la semana en el mes 2 (segundo miércoles de julio)
w Semana del año 40
W Semana en mes 1
un Marcador AM / PM PM
k Hora del día (1 ~ 24) 24
K Hora en AM / PM (0 ~ 11) 10
z Zona horaria hora estándar del Este
' Escape por texto Delimitador
" Una frase '

Formateo de fecha con printf

El formateo de fecha y hora se puede hacer muy fácilmente usando printfmétodo. Utiliza un formato de dos letras, comenzando cont y terminando en una de las letras de la tabla como se muestra en el siguiente código.

Ejemplo

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date
      String str = String.format("Current Date/Time : %tc", date );

      System.out.printf(str);
   }
}

Esto producirá el siguiente resultado:

Salida

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

Sería un poco tonto si tuviera que proporcionar la fecha varias veces para formatear cada parte. Por esa razón, una cadena de formato puede indicar el índice del argumento a formatear.

El índice debe seguir inmediatamente al% y debe terminar con un $.

Ejemplo

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display time and date
      System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

Esto producirá el siguiente resultado:

Salida

Due date: February 09, 2004

Alternativamente, puede usar la bandera <. Indica que se debe volver a utilizar el mismo argumento que en la especificación de formato anterior.

Ejemplo

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display formatted date
      System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
   }
}

Esto producirá el siguiente resultado:

Salida

Due date: February 09, 2004

Caracteres de conversión de fecha y hora

Personaje Descripción Ejemplo
C Fecha y hora completas Lunes 04 de mayo 09:51:52 CDT 2009
F Fecha ISO 8601 2004-02-09
re Fecha con formato de EE. UU. (Mes / día / año) 02/09/2004
T Tiempo de 24 horas 18:05:19
r Tiempo de 12 horas 06:05:19 pm
R 24 horas, sin segundos 18:05
Y Año de cuatro dígitos (con ceros a la izquierda) 2004
y Últimos dos dígitos del año (con ceros a la izquierda) 04
C Primeros dos dígitos del año (con ceros a la izquierda) 20
segundo Nombre del mes completo febrero
segundo Nombre del mes abreviado feb
metro Mes de dos dígitos (con ceros a la izquierda) 02
re Día de dos dígitos (con ceros a la izquierda) 03
mi Día de dos dígitos (sin ceros a la izquierda) 9
UN Nombre completo del día de la semana lunes
un Nombre abreviado del día de la semana Lun
j Día del año de tres dígitos (con ceros a la izquierda) 069
H Hora de dos dígitos (con ceros a la izquierda), entre 00 y 23 18
k Hora de dos dígitos (sin ceros a la izquierda), entre 0 y 23 18
yo Hora de dos dígitos (con ceros a la izquierda), entre 01 y 12 06
l Hora de dos dígitos (sin ceros a la izquierda), entre 1 y 12 6
METRO Minutos de dos dígitos (con ceros a la izquierda) 05
S Segundos de dos dígitos (con ceros a la izquierda) 19
L Milisegundos de tres dígitos (con ceros a la izquierda) 047
norte Nanosegundos de nueve dígitos (con ceros a la izquierda) 047000000
PAGS Marcador de mañana o tarde en mayúsculas PM
pags Marcador de mañana o tarde en minúsculas pm
z Desplazamiento numérico RFC 822 de GMT -0800
Z Zona horaria PST
s Segundos desde 1970-01-01 00:00:00 GMT 1078884319
Q Milisegundos desde 1970-01-01 00:00:00 GMT 1078884319047

Hay otras clases útiles relacionadas con la fecha y la hora. Para obtener más detalles, puede consultar la documentación estándar de Java.

Analizar cadenas en fechas

La clase SimpleDateFormat tiene algunos métodos adicionales, en particular parse (), que intenta analizar una cadena de acuerdo con el formato almacenado en el objeto SimpleDateFormat dado.

Ejemplo

import java.util.*;
import java.text.*;
  
public class DateDemo {

   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
      String input = args.length == 0 ? "1818-11-11" : args[0]; 

      System.out.print(input + " Parses as "); 
      Date t;
      try {
         t = ft.parse(input); 
         System.out.println(t); 
      } catch (ParseException e) { 
         System.out.println("Unparseable using " + ft); 
      }
   }
}

Una ejecución de muestra del programa anterior produciría el siguiente resultado:

Salida

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

Durmiendo un rato

Puede dormir durante cualquier período de tiempo, desde un milisegundo hasta la vida útil de su computadora. Por ejemplo, el siguiente programa dormirá durante 3 segundos:

Ejemplo

import java.util.*;
public class SleepDemo {

   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(5*60*10); 
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) {
         System.out.println("Got an exception!"); 
      }
   }
}

Esto producirá el siguiente resultado:

Salida

Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

Medir el tiempo transcurrido

A veces, es posible que deba medir un punto en el tiempo en milisegundos. Así que reescribamos el ejemplo anterior una vez más:

Ejemplo

import java.util.*;
public class DiffDemo {

   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

Esto producirá el siguiente resultado:

Salida

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

GregorianCalendar (clase)

GregorianCalendar es una implementación concreta de una clase Calendar que implementa el calendario gregoriano normal con el que está familiarizado. No discutimos la clase Calendar en este tutorial, puede buscar documentación estándar de Java para esto.

los getInstance( )El método de Calendar devuelve un GregorianCalendar inicializado con la fecha y hora actuales en la configuración regional y la zona horaria predeterminadas. GregorianCalendar define dos campos: AD y BC. Estos representan las dos eras definidas por el calendario gregoriano.

También hay varios constructores para objetos GregorianCalendar:

No Señor. Constructor y descripción
1

GregorianCalendar()

Construye un GregorianCalendar predeterminado usando la hora actual en la zona horaria predeterminada con la configuración regional predeterminada.

2

GregorianCalendar(int year, int month, int date)

Construye un GregorianCalendar con la fecha dada establecida en la zona horaria predeterminada con la configuración regional predeterminada.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

Construye un GregorianCalendar con la fecha y hora determinadas establecidas para la zona horaria predeterminada con la configuración regional predeterminada.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

Construye un GregorianCalendar con la fecha y hora determinadas establecidas para la zona horaria predeterminada con la configuración regional predeterminada.

5

GregorianCalendar(Locale aLocale)

Construye un GregorianCalendar basado en la hora actual en la zona horaria predeterminada con la configuración regional dada.

6

GregorianCalendar(TimeZone zone)

Construye un GregorianCalendar basado en la hora actual en la zona horaria dada con la configuración regional predeterminada.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

Construye un GregorianCalendar basado en la hora actual en la zona horaria dada con la localización dada.

Aquí está la lista de algunos métodos de soporte útiles proporcionados por la clase GregorianCalendar:

No Señor. Método y descripción
1

void add(int field, int amount)

Agrega la cantidad de tiempo especificada (firmada) al campo de tiempo dado, según las reglas del calendario.

2

protected void computeFields()

Convierte UTC en milisegundos en valores de campo de tiempo.

3

protected void computeTime()

Anula el calendario Convierte los valores del campo de tiempo a UTC en milisegundos.

4

boolean equals(Object obj)

Compara este GregorianCalendar con una referencia de objeto.

5

int get(int field)

Obtiene el valor de un campo de tiempo determinado.

6

int getActualMaximum(int field)

Devuelve el valor máximo que podría tener este campo, dada la fecha actual.

7

int getActualMinimum(int field)

Devuelve el valor mínimo que podría tener este campo, dada la fecha actual.

8

int getGreatestMinimum(int field)

Devuelve el valor mínimo más alto para el campo dado si varía.

9

Date getGregorianChange()

Obtiene la fecha de cambio del calendario gregoriano.

10

int getLeastMaximum(int field)

Devuelve el valor máximo más bajo para el campo dado si varía.

11

int getMaximum(int field)

Devuelve el valor máximo para el campo dado.

12

Date getTime()

Obtiene la hora actual de este calendario.

13

long getTimeInMillis()

Obtiene la hora actual de este calendario como un largo.

14

TimeZone getTimeZone()

Obtiene la zona horaria.

15

int getMinimum(int field)

Devuelve el valor mínimo para el campo dado.

dieciséis

int hashCode()

Reemplaza hashCode.

17

boolean isLeapYear(int year)

Determina si el año dado es bisiesto.

18

void roll(int field, boolean up)

Agrega o resta (arriba / abajo) una sola unidad de tiempo en el campo de tiempo dado sin cambiar campos más grandes.

19

void set(int field, int value)

Establece el campo de tiempo con el valor dado.

20

void set(int year, int month, int date)

Establece los valores de los campos año, mes y fecha.

21

void set(int year, int month, int date, int hour, int minute)

Establece los valores de los campos año, mes, fecha, hora y minuto.

22

void set(int year, int month, int date, int hour, int minute, int second)

Establece los valores para los campos año, mes, fecha, hora, minuto y segundo.

23

void setGregorianChange(Date date)

Establece la fecha de cambio del GregorianCalendar.

24

void setTime(Date date)

Establece la hora actual de este calendario con la fecha indicada.

25

void setTimeInMillis(long millis)

Establece la hora actual de este calendario a partir del valor largo dado.

26

void setTimeZone(TimeZone value)

Establece la zona horaria con el valor de zona horaria dado.

27

String toString()

Devuelve una representación de cadena de este calendario.

Ejemplo

import java.util.*;
public class GregorianCalendarDemo {

   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));

      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}

Esto producirá el siguiente resultado:

Salida

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

Para obtener una lista completa de las constantes disponibles en la clase Calendar, puede consultar la documentación estándar de Java.