Java proporciona la clase de fecha en el paquete java.util, que encapsula la fecha y hora actuales.
La clase de fecha admite dos constructores. El primer constructor inicializa la fecha y hora actuales del objeto.
Fecha( )
El siguiente constructor recibe un parámetro igual al número de milisegundos desde la medianoche del 1 de enero de 1970
Fecha (Long Millisec)
Una vez que hay un objeto de fecha disponible, puede llamar a cualquiera de los siguientes métodos compatibles para usar la hora:
| Sn | Métodos y descripciones |
|---|---|
| 1 | booleano después (fecha de fecha) Devuelve verdadero si el objeto de fecha de llamada contiene o más tarde que la fecha especificada, de lo contrario, return False. |
| 2 | booleano antes (fecha de fecha) Devuelve verdadero si el objeto de fecha de llamada contiene o anterior a la fecha especificada por la fecha, de lo contrario, return False. |
| 3 | Clon de objeto () Repita la llamada al objeto de fecha. |
| 4 | Int Compareto (fecha de fecha) Compare el valor del objeto de llamada con la fecha. Si estos dos valores son iguales, return 0. Devuelve un valor negativo si el objeto de llamada es anterior a la fecha. Devuelve un valor positivo si el objeto de llamada es posterior a la fecha. |
| 5 | int Compareto (objeto obj) Use la misma operación de comparación (fecha) si OBJ es una fecha de clase. De lo contrario, arroja una ClassCastException. |
| 6 | booleano es igual (fecha de objeto) Devuelva verdadero si el objeto de fecha de llamada contiene la misma hora y fecha especificada Fecha, de lo contrario, return False. |
| 7 | Long GetTime () Devuelve el número de milisegundos que han pasado desde el 1 de enero de 1970. |
| 8 | int hashcode () Devuelve el código hash del objeto llamado. |
| 9 | Settime vacío (mucho tiempo) Establece el tiempo especificado, que representa el tiempo transcurrido en milisegundos a partir de la medianoche del 1 de enero de 1970. |
| 10 | Cadena toString () Llame al objeto de fecha para convertir a una cadena y devuelva el resultado. |
import java.util.date; public class Datedemo {public static void main (string args []) {// instanciar una fecha del objeto fecha de fecha = nueva fecha (); // Mostrar hora y fecha usando toString () System.out.println (date.ToString ()); }}Esto producirá los siguientes resultados:
Lunes 04 09:51:52 CDT 2009
Comparación de fecha
Hay tres formas de comparar dos fechas:
Fechas de formato utilizando SimpleDateFormat
SimpleDateFormat es una clase de concreto utilizada localmente para formatear y convertir fechas. SimpleDateFormat permite la selección de esquemas definidos por el usuario hasta la fecha y el formato de hora. Por ejemplo:
import java.util.*; import java.text.*; clase pública datedemo {public static void main (string args []) {date dnow = new Date (); SimpleDateFormat ft = new SimpleDateFormat ("e yyyy.mm.dd 'en' hh: mm: ss a zzz"); System.out.println ("Fecha actual:" + ft.format (dnow)); }}Esto producirá los siguientes resultados:
Fecha actual: Sun 2004.07.18 a las 04:14:09 PM PDT
Código de formato de formato de fecha simple
Para especificar un formato de tiempo, use una cadena de patrón de tiempo. En este patrón, todas las letras ASCII se conservan como letras de patrón, que se definen de la siguiente manera:
| personaje | describir | ejemplo |
|---|---|---|
| GRAMO | Indicador de tiempo | ANUNCIO |
| Y | Años de cuatro dígitos | 2001 |
| METRO | Medio año | Julio o 07 |
| d | Fecha del mes | 10 |
| H | Tiempo am/pm (1 ~ 12) | 12 |
| H | Hora en el día (0 ~ 23) | Veintidós |
| metro | Actas de horas | 30 |
| s | Segundos de minutos | 55 |
| S | milisegundo | 234 |
| mi | El día de la semana | Martes |
| D | El día del año | 360 |
| F | El día de la semana del mes | 2 (segundo miércoles en julio) |
| w | Medio año de la semana | 40 |
| W | Semana del mes | 1 |
| a | Marcadores de AM/PM | P.M |
| k | Hora en el día (1 ~ 24) | veinticuatro |
| K | Horas am/pm (0 ~ 11) | 10 |
| z | Huso horario | Hora estándar del este |
| ' | Dejar texto | Delimitador |
| " | Citas individuales | `` |
import java.util.date; public class Datedemo {public static void main (string args []) {// instanciar una fecha del objeto fecha de fecha = nueva fecha (); // Mostrar hora y fecha usando toString () string str = string.format ("Fecha/hora actual: %TC", fecha); System.out.printf (STR); }}Esto producirá los siguientes resultados:
Fecha/hora actual: sábado 15 de diciembre 16:37:57 MST 2012
Es una mala práctica proporcionar formato múltiple de fechas. Una cadena de formato puede indicar el índice de los parámetros que se formatearán.
El índice debe ser seguido inmediatamente por el % y debe ser terminado por $. Por ejemplo:
import java.util.date; public class Datedemo {public static void main (string args []) {// instanciar una fecha del objeto fecha de fecha = nueva fecha (); // Muestra la hora y la fecha utilizando toString () System.out.printf (" %1 $ s %2 $ tb %2 $ td, %2 $ ty", "fecha de vencimiento:", fecha); }}Esto producirá los siguientes resultados:
Fecha de vencimiento: 09 de febrero de 2004
Alternativamente, se puede usar la bandera <. Significa los mismos parámetros y debe usarse nuevamente de acuerdo con las especificaciones de formato anteriores. Por ejemplo:
import java.util.date; public class Datedemo {public static void main (string args []) {// instanciar una fecha del objeto fecha de fecha = nueva fecha (); // Muestra la fecha formateada System.out.printf (" %s %tb %<te, %<ty", "fecha de vencimiento:", fecha); }}Esto producirá los siguientes resultados:
Fecha de vencimiento: 09 de febrero de 2004
Caracteres de conversión de fecha y fecha
| personaje | describir | ejemplo |
|---|---|---|
| do | Fecha y hora completas | Lunes 04 09:51:52 CDT 2009 |
| F | Fecha de ISO 8601 | 2004-02-09 |
| D | Tiempo de formato de EE. UU. (Mes/día/año) | 02/09/2004 |
| T | 24 veces sistema | 18:05:19 |
| riñonal | Sistema de 12 veces | 06:05:19 PM |
| Riñonal | 24 veces sistema, sin segundos | 18:05 |
| Y | Año de cuatro dígitos (usando la primera columna de fila cero) | 2004 |
| Y | Los últimos dos dígitos del año (usando la primera columna de fila cero) | 04 |
| do | Los primeros dos dígitos del año (usando la primera columna de fila cero) | 20 |
| B | Nombre de mes completo | Febrero |
| b | Nombre del mes de la abreviación | Feb |
| metro | Meses de dos dígitos (usando la primera columna de fila cero) | 02 |
| d | Fecha de dos dígitos (usando la primera columna de fila cero) | 03 |
| mi | Fecha de dos dígitos (sin columna cero de reenvío) | 9 |
| A | Nombre de la semana completa | Lunes |
| a | Abreviatura del nombre de la semana | Lun |
| j | Días de tres dígitos a mediados de año (usando la primera columna de fila cero) | 069 |
| H | Horas de dos dígitos (usando la primera columna de fila cero), entre 00 y 23 | 18 |
| k | Horas de dos dígitos (sin columna cero directa), entre 0 y 23 | 18 |
| I | Horas de dos dígitos (usando la primera columna de fila cero), entre 01 y 12 | 06 |
| l | Horas de dos dígitos (sin columna cero directa), entre 1 y 12 | 6 |
| METRO | Minutos de dos dígitos (use la primera columna de fila cero) | 05 |
| S | Segundos de dos dígitos (use la primera columna de fila cero) | 19 |
| L | Milisegundos de tres dígitos (usando la primera columna de fila cero) | 047 |
| norte | Nanosegundos de nueve dígitos (usando la primera columna de fila cero) | 047000000 |
| PAG | Marca de la tarde de capitalización | P.M |
| pag | Marca de la tarde en minúsculas | p.m |
| z | RFC 822 compensación del número GMT | -0800 |
| Z | Huso horario | PST |
| s | Segundos desde 1970-01-01 00:00:00 GMT | 1078884319 |
| Q | GMT de 1970-01-01 00:00:00 | 1078884319047 |
Fecha de conversión de cadena
La clase SimpleDateFormat tiene algunos métodos adicionales, como Parse (), que intenta convertir una cadena basada en el formato del objeto almacenado en un SimpleDateFormat dado. Por ejemplo:
import java.util.*; import java.text.*; public class Datedemo {public static void main (string args []) {simpledateFormat ft = new SimpleDateFormat ("yyyy-mm-dd"); Entrada de cadena = args.length == 0? "1818-11-11": Args [0]; System.out.print (entrada + "analizados como"); Fecha t; intente {t = ft.parse (entrada); System.out.println (t); } Catch (ParseException e) {System.out.println ("incomparable usando" + ft); }}}El ejemplo de ejecución del programa anterior producirá los siguientes resultados:
$ Java Datedemo1818-11-11 analizar el miércoles 11 de noviembre 00:00:00 GMT 1818 $ Java Datedemo 2007-12-012007-12-01 PARSES AS SAT 01 00:00:00 GMT 2007
Duerme por un tiempo
Puede realizar cualquier momento durante la hibernación de un milisegundo a todo el ciclo de vida de su computadora. Por ejemplo, el siguiente programa dormirá durante 10 segundos:
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 (nueva fecha () + "/n"); } catch (Exception e) {System.out.println ("¡Tengo una excepción!"); }}}Esto producirá los siguientes resultados:
Sol 03 de mayo 18:04:41 GMT 2009 Sun 03 de mayo 18:04:51 GMT 2009
Medir el tiempo de ejecución
A veces, los puntos de tiempo que se pueden medir pueden estar en milisegundos. Entonces, reescribamos el ejemplo anterior nuevamente:
import java.util.*; clase pública diffdemo {public static void main (string args []) {try {long start = system.currentTimemillis (); System.out.println (nueva fecha () + "/n"); Thread.sleep (5*60*10); System.out.println (nueva fecha () + "/n"); Long End = System.CurrentTimemillis (); larga diff = final - inicio; System.out.println ("La diferencia es:" + diff); } catch (Exception e) {System.out.println ("¡Tengo una excepción!"); }}}Esto producirá los siguientes resultados:
Sol 03 de mayo 18:16:51 GMT 2009 Sun 03 de mayo 18:16:57 GMT 2009 Diferference es: 5993
Clase Gregoriancalendar
Gregoriancalendar es una implementación concreta de la clase de calendario, es decir, la implementación del gregoriano gregoriano normal con el que está familiarizado. La clase de calendario no se discute en este tutorial, puede consultar la documentación estándar de Java.
El método GetInStance () de Calendar devuelve un Gregoriancalendar inicializado con la fecha y la zona horaria predeterminada y la zona horaria predeterminadas. Dos campos se definen en Gregoriancalendar: AD y BC. Estos representan dos épocas definidas en el calendario gregoriano.
También hay varios constructores de objetos Gregoriancalendar:
| Sn | Descripción del constructor |
|---|---|
| 1 | Gregoriancalendar () Construya el Gregoriancalendar predeterminado utilizando la hora actual en la zona horaria predeterminada con la configuración local predeterminada. |
| 2 | Gregoriancalendar (int año, int mes, int fecha) Establezca el localidad predeterminado en la zona horaria predeterminada para construir un Gregoriancalendar con la fecha dada |
| 3 | Gregoriancalendar (int año, int mes, int fecha, intour, int mind) Construye un Gregoriancalendar con la fecha y hora determinadas establecidas en la zona horaria predeterminada con la configuración local predeterminada. |
| 4 | Gregoriancalendar (intane intane, int mes, int fecha, int hour, int mind, int segundo) Construya un Gregoriancalendar con la fecha y hora determinadas establecidas en la zona horaria predeterminada con la configuración regional predeterminada |
| 5 | Gregoriancalendar (Locale Alocale) Construya un Gregoriancalendar basado en la hora actual y la zona horaria predeterminada de la localidad dada. |
| 6 | Gregoriancalendar (zona horaria) Según la hora actual, un Gregoriancalendar está construido en una zona horaria dada utilizando la configuración local predeterminada. |
| 7 | Gregoriancalendar (zona horaria, localidad alocale) Se construye un Gregoriancalendar en función de la hora actual y la zona horaria dada del localidad dada. |
| Sn | Métodos y descripciones |
|---|---|
| 1 | Void add (intento int, cantidad int) Una regla basada en calendario agrega una cantidad de tiempo específica (firmada) al campo de tiempo dado. |
| 2 | Computefields vacío protegido () Convierta el valor de campo de tiempo de MilliseCond a MilliseCond. |
| 3 | Vacío protegido CompuTETime () Sobrescribir milisegundos en los que el calendario convierte el valor del dominio de tiempo es UTC. |
| 4 | booleano es igual (obj obj) Este Gregoriancalendar se compara con una referencia de objeto. |
| 5 | int get (int campo) Obtiene el valor del dominio de tiempo dado. |
| 6 | int getActualmaximum (campo int) Devuelve el valor máximo posible del campo, dado a la fecha actual. |
| 7 | int getActualMinimum (Field int) Devuelve el valor mínimo que puede tener el campo, dada la fecha actual. |
| 8 | int Devuelve el valor más alto y más bajo (si hay un cambio) para el campo dado. |
| 9 | Fecha getGregorianchange () Obtenga la fecha de cambio en el calendario gregoriano. |
| 10 | int getLeastmaximum (campo int) Devuelve el valor máximo más bajo para el campo dado, si hay un cambio. |
| 11 | int getmaximum (campo int) Devuelve el valor máximo en el campo dado. |
| 12 | Fecha gettime () Obtenga la hora actual del calendario. |
| 13 | Long getTimeinmillis () El momento actual para obtener el calendario. |
| 14 | TimeZone GetTimezone () Obtenga la zona horaria. |
| 15 | int getMinimum (int campo) Devuelve el valor mínimo en el campo dado. |
| 16 | int hashcode () Reescribe el hashcode. |
| 17 | boolean isleapyear (int año) Determina que un año determinado es un año bisiesto. |
| 18 | rollo vacío (int campo, booleano arriba) Agrega o resta el tiempo (arriba/hacia abajo) (arriba/hacia abajo) una unidad en el campo de tiempo dado, sin cambiar el campo más grande. |
| 19 | conjunto vacío (campo int, valor int) Establece el campo de tiempo con el valor dado. |
| 20 | Set Void Set (int Year, Int Month, Int Fecha) Establecido en el valor del año, el mes y el día. |
| veintiuno | set void (int año, int mes, int fecha, int hora, int mind) Establecido en valores de año, mes, día, hora y minuto. |
| Veintidós | Set Void (int año, int mes, int fechle, int hour, int mind, int segundo) Establecido en el valor del año, mes, día, hora, minuto y segundo del campo. |
| veintitrés | void setGregorianchange (fecha de fecha) Establezca la fecha de cambio de Gregoriancalendar. |
| veinticuatro | Settime vacío (fecha de fecha) Establece la hora actual y la fecha dada del calendario. |
| 25 | nulo setTimeinmillis (Long Millis) Establezca la hora actual del calendario del valor largo dado. |
| 26 | nulo setTimezone (valor horario) Establece la zona horaria con el valor de la zona horaria dada. |
| 27 | Cadena toString () Devuelve la representación de cadena de este calendario. |
import java.util.*; clase pública Gregoriancalendardemo {public static void main (string args []) {string meses [] = {"jan", "feb", "mar", "abr", "may", "jun", "jul", "agu", "sep", "oct", "nov", "dec" dec "; int año; // Cree un Gregoriancalendar inicializado // con la fecha y hora actuales en la ubicación y la zona horaria predeterminada. Gregoriancalendar gcalendar = new Gregoriancalendar (); // Muestra información actual de hora y fecha. System.out.print ("Fecha:"); System.out.print (meses [gcalendar.get (calendario.month)]); System.out.print ("" + gcalendar.get (calendar.date) + ""); System.out.println (año = gcalendar.get (calendar.year)); System.out.print ("Time:"); System.out.print (gcalendar.get (calendar.hour) + ":"); System.out.println (gcalendar.get (calendar.minute) + ":"); System.out.println (gcalendar.get (calendar.second)); // Prueba si el año en curso es un año salto if (gcalendar.eSeapyear (año)) {System.out.println ("El año en curso es un año bisiesto"); } else {System.out.println ("El año en curso no es un año bisiesto"); }}}Esto producirá los siguientes resultados:
Fecha: 22 de abril de 2009 Tiempo: 11: 25: 27 El año en curso no es un año bisiesto
Applet de calendario
Echemos un vistazo a un applet de calendario. Aquí usamos la estructura MVC tradicional para diseñar tres categorías: Calendarviewer, CalendarController y Calendarmodel.
Calendarviewer.java procesa principalmente la interfaz de usuario, utiliza el código existente, lo organiza y extrae la lógica de negocios, para que se centre en el procesamiento de la capa de visualización.
Calendarviewer.java
Public Class CalendarViewer extiende Jwindow implementos ActionListener {jPanel calendarympanel = null; JButton LeftButton = new JButton ("<<"); JButton RightButton = new JButton (">>"); Label YearLabel = new Label (); Label Montlabel = new Label (); Etiqueta passdayslabel = new Label (); Jpanel calendarwdpanel = null; // es el cuerpo de inclusión total de calendar_week y calendar_days jpanel calendarweekpanel = null; // diseño para columnas semanales jpanel calendARDAspanel = null; // Layout para las columnas de la fecha jpanel calendarexitpanel = null; JButton QuitButton = new JButton ("Cerrar"); Border vacíaBorder = borderFactory.CreateEptyBorder (); CalendarController cController = new CalendarController (); public calendarviewer () {super (); buildui (); } public void buildui () {buildToppanel (); BuildCenterPanel (); BuildBottompanel (); setLayout (new BorderLayout ()); . . . . . . } private void buildToppanel () {. . . . . . } private void buildCenterPanel () {. . . . . . } private void buildbottompanel () {. . . . . . } public jpanel actualizadoayspanel () {. . . . . . } public void UpdatePassedDaySlabel () {. . . . . . } public void ActionPerformed (ActionEvent E) {. . . . . . } public static void main (string [] args) {swingUtility.invokelater (new Runnable () {public void run () {new CalendarViewer ();}}); }}La estructura de la interfaz de usuario se divide principalmente en 3 bloques, correspondientes a los tres paneles en la figura superior, media e inferior.
El procesamiento de la escucha de eventos se completa con el siguiente método.
La actualización de UI basada en eventos se realiza mediante los siguientes dos métodos.
UpdateDaysPanel (); UpdatePassedDaySlabel (); CalendarController.java se ocupa principalmente de lógica comercial específica, mientras que algunas lógicas de algoritmo de calendario utilizados que no están relacionados con la aplicación específica se entregan a calendarmodel.java. Calendarmodel.javapublic class calendarmodel {private int daytab [] [] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 31, 30, 31, 31, 30, 31}}; public boolean isleapyear (int año) {return ((año % 4 == 0 && año % 100! = 0) || año % 400 == 0); } public int dayofyear (int day, int mes, int año) {int salto = isleapyear (año)? 1: 0; para (int i = 1; i <mes; i ++) día+= daytab [salto] [i]; día de regreso; } public int DaysOfMonth (int mes, int año) {int salto = isleapyear (año)? 1: 0; return daytab [salto] [mes]; } public int dayofweek (int day, int mes, int año) {if (mes == 1) {mes = 13; año--; } if (mes == 2) {mes = 14; año--; } retorno (día + 2 * mes + 3 * (mes + 1) / 5 + año + año / 4 - año / 100 + año / 400) % 7 + 1; }}Cree una matriz bidimensional que represente el número de días por mes para los años bisiestos y los años no lento, respectivamente. Los métodos principales son:
Fórmula de cálculo de Kim Larson