Java fournit la classe de date du package java.util, qui résume la date et l'heure actuelles.
La classe de date prend en charge deux constructeurs. Le premier constructeur initialise la date et l'heure actuelles de l'objet.
Date( )
Le constructeur suivant reçoit un paramètre égal au nombre de millisecondes depuis minuit le 1er janvier 1970
Date (long millisec)
Une fois qu'il existe un objet de date disponible, vous pouvez appeler l'une des méthodes prises en charge suivantes pour utiliser l'heure:
| Sn | Méthodes et descriptions |
|---|---|
| 1 | booléen après (date de date) Renvoie true si l'objet de date d'appel contient ou plus tard que la date spécifiée, sinon, renvoyez false. |
| 2 | booléen avant (date de date) Renvoie true si l'objet de date d'appel contient ou antérieure à la date spécifiée par la date, sinon, renvoyez false. |
| 3 | Objet clone () Répétez l'appel à l'objet de date. |
| 4 | int compareto (date de date) Comparez la valeur de l'objet d'appel à la date. Si ces deux valeurs sont égales, renvoyez 0. Renvoie une valeur négative si l'objet d'appel est antérieure à la date. Renvoie une valeur positive si l'objet d'appel est plus tard que la date. |
| 5 | int compareto (objet obj) Utilisez la même opération de comparaison (date) si OBJ est une date de classe. Sinon, il lance une classCastException. |
| 6 | booléen égaux (date de l'objet) Renvoie True si l'objet de date d'appel contient le même temps et la même date spécifiée, sinon, renvoyez false. |
| 7 | long gettime () Renvoie le nombre de millisecondes qui sont passées depuis le 1er janvier 1970. |
| 8 | int hashcode () Renvoie le code de hachage de l'objet appelant. |
| 9 | vide settime (longtemps) Définit le temps spécifié, qui représente le temps écoulé en millisecondes à partir de minuit le 1er janvier 1970. |
| 10 | String toString () Appelez l'objet Date pour convertir en chaîne et renvoyez le résultat. |
import java.util.date; public class DaDemo {public static void main (String args []) {// instancier une date date d'objet Date = new Date (); // Afficher l'heure et la date à l'aide de toString () System.out.println (date.toString ()); }}Cela produira les résultats suivants:
Lun 04 04 09:51:52 CDT 2009
Comparaison des dates
Il existe trois façons de comparer deux dates:
Dates de format utilisant SimpledateFormat
SimpledateFormat est une classe de béton utilisée localement pour la mise en forme et la conversion des dates. SimpledateFormat permet la sélection de schémas définis par l'utilisateur au format à ce jour et à l'heure. Par exemple:
Importer java.util. *; import java.text. *; public class DaDemo {public static void main (String args []) {date dnow = new Date (); SimpledateFormat ft = new SimpledateFormat ("e yyy.mm.dd 'à' hh: mm: ss a zzz"); System.out.println ("Date actuelle:" + ft.format (dnow)); }}Cela produira les résultats suivants:
Date actuelle: Sun 2004.07.18 à 04:14:09 PDT
Code de format DateFormat simple
Pour spécifier un format de temps, utilisez une chaîne de modèle de temps. Dans ce modèle, toutes les lettres ASCII sont conservées sous forme de lettres de modèle, qui sont définies comme suit:
| personnage | décrire | exemple |
|---|---|---|
| G | Indicateur de temps | ANNONCE |
| y | À quatre chiffres | 2001 |
| M | Mois de milieu de l'année | Juillet ou 07 |
| d | Date du mois | 10 |
| H | Temps AM / PM (1 ~ 12) | 12 |
| H | Heure dans la journée (0 ~ 23) | vingt-deux |
| m | Minutes des heures | 30 |
| s | Secondes de minutes | 55 |
| S | millisecondes | 234 |
| E | Le jour de la semaine | Mardi |
| D | Le jour de l'année | 360 |
| F | Le jour de la semaine dans le mois | 2 (deuxième mercredi en juillet) |
| w | Semaine de milieu de l'année | 40 |
| W | Semaine du mois | 1 |
| un | Marqueurs AM / PM | PM |
| k | Heure dans la journée (1 ~ 24) | vingt-quatre |
| K | Heures am / pm (0 ~ 11) | 10 |
| z | Fuseau horaire | Heure standard orientale |
| ' | Laisser du texte | Délimiteur |
| " | Citations uniques | ' |
import java.util.date; public class DaDemo {public static void main (String args []) {// instancier une date date d'objet Date = new Date (); // Afficher l'heure et la date à l'aide de toString () String str = string.format ("Date actuelle / heure:% TC", date); System.out.printf (STR); }}Cela produira les résultats suivants:
Date / heure actuelle: Sat 15 décembre 16:37:57 MST 2012
C'est une mauvaise pratique de fournir un formatage multiple des dates. Une chaîne de format peut indiquer l'index des paramètres à formater.
L'indice doit être immédiatement suivi de% et doit être résilié par $. Par exemple:
import java.util.date; public class DaDemo {public static void main (String args []) {// instancier une date date d'objet Date = new Date (); // Afficher l'heure et la date à l'aide de toString () System.out.printf ("% 1 $ s% 2 $ TB% 2 $ TD,% 2 $ TY", "Date d'échéance:", date); }}Cela produira les résultats suivants:
Date d'échéance: 09 février 2004
Alternativement, le <drapeau peut être utilisé. Cela signifie les mêmes paramètres et doit être utilisé à nouveau en fonction des spécifications de format ci-dessus. Par exemple:
import java.util.date; public class DaDemo {public static void main (String args []) {// instancier une date date d'objet Date = new Date (); // Afficher la date formatée System.out.printf ("% S% TB% <TE,% <ty", "Date d'échéance:", date); }}Cela produira les résultats suivants:
Date d'échéance: 09 février 2004
Caractères de conversion de date et d'heure
| personnage | décrire | exemple |
|---|---|---|
| c | Date et heure complètes | Lun 04 04 09:51:52 CDT 2009 |
| F | Date ISO 8601 | 2004-02-09 |
| D | Heure du format américain (mois / jour / an) | 02/09/2004 |
| T | Système 24 fois | 18:05:19 |
| r | Système 12 fois | 06:05:19 |
| R | Système 24 fois, pas de secondes | 18:05 |
| Y | Année à quatre chiffres (en utilisant la première colonne zéro ligne) | 2004 |
| y | Les deux derniers chiffres de l'année (en utilisant la première colonne zéro ligne) | 04 |
| C | Les deux premiers chiffres de l'année (en utilisant la première colonne de zéro ligne) | 20 |
| B | Nom du mois complet | Février |
| b | Nom du mois d'abréviation | Fév |
| m | Mois à deux chiffres (en utilisant la première colonne zéro ligne) | 02 |
| d | Date à deux chiffres (en utilisant la première colonne zéro ligne) | 03 |
| e | Date à deux chiffres (pas de colonne de zéro avant) | 9 |
| UN | Nom de la semaine complète | Lundi |
| un | Abréviation de la semaine Nom | Lun |
| J | Jours à trois chiffres au milieu de l'année (en utilisant la première colonne zéro ligne) | 069 |
| H | HEURES À deux chiffres (en utilisant la première colonne zéro ligne), entre 00 et 23 | 18 |
| k | HEURES À deux chiffres (pas de colonne de zéro avant), entre 0 et 23 | 18 |
| je | HEURES À deux chiffres (en utilisant la première colonne zéro ligne), entre 01 et 12 | 06 |
| l | HEURES À deux chiffres (pas de colonne de zéro avant), entre 1 et 12 | 6 |
| M | Minutes à deux chiffres (utilisez la première colonne de zéro ligne) | 05 |
| S | Deux secondes à deux chiffres (utilisez la première colonne zéro ligne) | 19 |
| L | Millisecondes à trois chiffres (en utilisant la première colonne zéro ligne) | 047 |
| N | Nanosecondes à neuf chiffres (en utilisant la première colonne zéro ligne) | 047000000 |
| P | Marque de l'après-midi de la capitalisation | PM |
| p | Marque de l'après-midi en minuscules | PM |
| z | Offset RFC 822 du numéro GMT | -0800 |
| Z | Fuseau horaire | TVP |
| s | Secondes de 1970 à 01-01 00:00:00 GMT | 1078884319 |
| Q | GMT de 1970 à 01-01 00:00:00 | 1078884319047 |
Date de conversion des chaînes
La classe SimpledateFormat a des méthodes supplémentaires, telles que Parse (), qui tente de convertir une chaîne en fonction du format de l'objet stocké dans un SimpledateFormat donné. Par exemple:
Importer java.util. *; import java.text. *; public class daDemo {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; essayez {t = ft.parse (entrée); System.out.println (t); } catch (parseException e) {System.out.println ("inégalable en utilisant" + ft); }}}L'exemple en cours du programme ci-dessus produira les résultats suivants:
$ Java Datemo1818-11-11 Parses comme mer 11 novembre 00:00:00 GMT 1818 $ Java Datemo 2007-12-012007-12-01 Parses comme samedi 01 décembre 00:00:00 GMT 2007
Dormir pendant un moment
Vous pouvez effectuer à tout moment pendant l'hibernation d'une milliseconde à tout le cycle de vie de votre ordinateur. Par exemple, le programme suivant dormira pendant 10 secondes:
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 a Exception!"); }}}Cela produira les résultats suivants:
Soleil Mai 03 18:04:41 GMT 2009Sun 03 mai 18:04:51 GMT 2009
Mesurer le temps d'exécution
Parfois, les moments qui peuvent être mesurés peuvent être en millisecondes. Alors, réécrivons à nouveau l'exemple ci-dessus:
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 - démarrer; System.out.println ("La différence est:" + diff); } catch (exception e) {System.out.println ("Got a Exception!"); }}}Cela produira les résultats suivants:
Soleil mai 03 18:16:51 GMT 2009Sun 03 mai 18:16:57 GMT 2009 La différence est: 5993
Classe Gregoriancalendar
GregorianCalendar est une implémentation concrète de la classe de calendrier, c'est-à-dire la mise en œuvre du grégorien grégorien normal que vous connaissez. La classe de calendrier n'est pas discutée dans ce tutoriel, vous pouvez consulter la documentation Java standard.
La méthode GetInstance () de Calendar renvoie un GregorianCalendar initialisé avec la date et l'heure et l'heure par défaut en cours par défaut. Deux champs sont définis dans Gregoriancalendar: AD et BC. Ceux-ci représentent deux époques définies dans le calendrier grégorien.
Il existe également plusieurs constructeurs d'objets GregorianCalendar:
| Sn | Description du constructeur |
|---|---|
| 1 | Gregoriancalendar () Construisez le GregorianCalendar par défaut en utilisant l'heure actuelle dans le fuseau horaire par défaut avec les paramètres par défaut. |
| 2 | Gregoriancalendar (int an, int mois, date int) Définissez le paramètre par défaut dans le fuseau horaire par défaut pour construire un GregorianCalendar avec la date donnée |
| 3 | GregorianCalendar (Int Year, int Mois, int Date, int Hour, int Minute) Construit un GregorianCalendar avec la date et l'heure donnés définis sur le fuseau horaire par défaut avec les paramètres par défaut. |
| 4 | Gregoriancalendar (int an, int mois, date int, hour int, int mutte, int seconde) Construisez un GregorianCalendar avec la date et l'heure donnés définis sur le fuseau horaire par défaut avec le paramètre par défaut |
| 5 | Gregoriancalendar (Locale Alocale) Construisez un GregorianCalendar en fonction de l'heure actuelle et du fuseau horaire par défaut des paramètres régionaux donnés. |
| 6 | Gregoriancalendar (Zone de fuseau horaire) Sur la base de l'heure actuelle, un GregorianCalendar est construit dans un fuseau horaire donné en utilisant les paramètres par défaut. |
| 7 | Gregoriancalendar (Zone du fuseau horaire, Locale Alocale) Un Gregoriancalendar est construit sur la base de l'heure actuelle et du fuseau horaire donné du lieu donné. |
| Sn | Méthodes et descriptions |
|---|---|
| 1 | void Add (INT Field, INT MUTL) Une règle basée sur le calendrier ajoute une durée spécifiée (signée) au champ de temps donné. |
| 2 | VOID COMPUTEFIELDS () protégé () Convertir UTC en valeur de champ de temps en millisecondes. |
| 3 | Protégé de l'ordinateur vide () Écraser des millisecondes dans lesquelles le calendrier convertit la valeur du domaine temporel est UTC. |
| 4 | booléen égaux (objet obj) Ce Gregoriancalendar est comparé à une référence d'objet. |
| 5 | int get (INT Field) Obtient la valeur du domaine temporel donné. |
| 6 | int getactualmaximum (champ int) Renvoie la valeur maximale possible du champ, données à la date actuelle. |
| 7 | int getactualminimum (champ int) Renvoie la valeur minimale que le champ peut avoir, compte tenu de la date actuelle. |
| 8 | int getGreateStMinimum (champ int) Renvoie la valeur élevée et la plus basse (s'il y a un changement) pour le champ donné. |
| 9 | Date getgregorianchange () Obtenez la date du changement dans le calendrier grégorien. |
| 10 | int getleastmaximum (champ int) Renvoie la valeur maximale la plus basse pour le champ donné, s'il y a un changement. |
| 11 | int getMaximum (champ int) Renvoie la valeur maximale dans le champ donné. |
| 12 | Date GetTime () Obtenez l'heure actuelle du calendrier. |
| 13 | long gettimeinmilis () L'heure actuelle pour obtenir le calendrier. |
| 14 | Timezone getTimeZone () Obtenez le fuseau horaire. |
| 15 | int getminimum (champ int) Renvoie la valeur minimale dans le champ donné. |
| 16 | int hashcode () Réécrivez HashCode. |
| 17 | Boolean Isleapyear (INT Year) Détermine qu'une année donnée est une année de saut. |
| 18 | Vide Roll (Int Field, Boolean Up) Ajouter ou soustraire (haut / bas) temps (haut / bas) une unité dans le champ de temps donné, sans changer le champ plus grand. |
| 19 | VOID SET (INT Field, int Value) Définit le champ de temps avec la valeur donnée. |
| 20 | Ensemble de vide (INT Year, int mois, date int) Réglé sur la valeur de l'année, du mois et du jour. |
| vingt-et-un | Ensemble de vide (INT Year, int mois, date int, int hour, INT MINDINE) Les valeurs de l'année, du mois, du jour, de l'heure et des minutes. |
| vingt-deux | Ensemble de vide (int an, int mois, date int, int hour, int mutte, int seconde) Réglé sur la valeur de l'année, du mois, du jour, de l'heure, de la minute et du deuxième du terrain. |
| vingt-trois | void SetGregorianChange (date de date) Définissez la date de modification de GregorianCalendar. |
| vingt-quatre | vide settime (date de date) Définit l'heure actuelle et la date donnée du calendrier. |
| 25 | vide setTimeInmillis (long millis) Définissez l'heure actuelle du calendrier à partir de la valeur longue donnée. |
| 26 | void setTimeZone (valeur de fuseau horaire) Définit le fuseau horaire avec la valeur du fuseau horaire donné. |
| 27 | String toString () Renvoie la représentation des chaînes de ce calendrier. |
import java.util. *; classe publique GregorianCalendardeMo {public static void main (String args []) {String mois [] = {"jan", "février", "mar", "aper", "mai", "juin", "jul", "août", "sept", "oct", "nov", "déc"}; INT annuelle; // Créez un GregorianCalendar Initialized // avec la date et l'heure actuelles dans les paramètres par défaut et le fuseau horaire. GregorianCalendar GCalendar = New GregorianCalendar (); // Afficher les informations actuelles d'heure et de date. System.out.print ("Date:"); System.out.print (mois [gcalendar.get (calendar.month)]); System.out.print ("" + gcalendar.get (calendar.date) + ""); System.out.println (année = 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)); // Testez si l'année en cours est une année de saut si (gcalendar.isapyear (année)) {System.out.println ("L'année en cours est une année de saut"); } else {System.out.println ("L'année en cours n'est pas une année de saut"); }}}Cela produira les résultats suivants:
Date: 22 avril 2009 fois: 11: 25: 27.La année en cours n'est pas une année de saut
Applet de calendrier
Jetons un œil à une applet de calendrier. Ici, nous utilisons la structure MVC traditionnelle pour concevoir trois catégories: CalendarViewer, CalendarController et Calendarmodel.
CalendarViewer.java traite principalement l'interface utilisateur, utilise le code existant, l'organise et extrait la logique métier, de sorte qu'elle se concentre sur le traitement de la couche d'affichage.
Calendarviewer.java
classe publique CalendarViewer étend JWindow implémente ActionListener {jpanel calendarympanel = null; JBUTTON LeftButton = New Jbutton ("<<"); JBUTTON RUTERBUTTON = NOUVEAU JBUTTON (">>"); Label YearLabel = new Label (); Label MonthLabel = new Label (); Label passaysLabel = new Label (); Jpanel calendarwdpanel = null; // est le corps d'inclusion total de calendar_week et calendar_days jpanel calendarweekpanel = null; // disposition pour les colonnes hebdomadaires jpanel calendardayspanel = null; JBUTTON QUITBUTTON = NOUVEAU JBUTTON ("CLOSE"); Border videborder = BorderFactory.CreateEmpPyBorder (); 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 updatedayspanel () {. . . . . . } public void updatePassEdDaysLabel () {. . . . . . } public void ActionPerformed (ActionEvent e) {. . . . . . } public static void main (String [] args) {swingutiability.invokelater (new Runnable () {public void run () {new CalendarViewer ();}}); }}La structure de l'interface utilisateur est principalement divisée en 3 blocs, correspondant aux trois panneaux sur la figure supérieure, moyenne et inférieure.
Le traitement de l'écoute des événements est complété par la méthode suivante.
La mise à jour d'interface utilisateur basée sur des événements est effectuée par les deux méthodes suivantes.
UpdatedAyspanel (); UpdatePassEdDaySLabel (); CalendarController.java traite principalement de la logique métier spécifique, tandis que certaines logiques d'algorithme de calendrier utilisées qui ne sont pas liées à l'application spécifique sont remises à Calendarmodel.java. Calendarmodel.javapublic Classe Calendarmodel {private int Daytab [] [] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31}}; public boolean isleapyear (int an) {return ((année% 4 == 0 && an% 100! = 0) || an% 400 == 0); } public int dayofyear (int day, int mois, int an) {int leap = isleapyear (année)? 1: 0; pour (int i = 1; i <mois; i ++) jour + = daytab [leap] [i]; jour de retour; } public int waysofmonth (int mois, int an) {int leap = isleapyear (année)? 1: 0; retour daytab [leap] [mois]; } public int dayofweek (int day, int mois, int an) {if (mois == 1) {mois = 13; année--; } if (mois == 2) {mois = 14; année--; } Retour (jour + 2 * mois + 3 * (mois + 1) / 5 + an + an / 4 - an / 100 + an / 400)% 7 + 1; }}Créez un tableau bidimensionnel qui représente respectivement le nombre de jours par mois pour les années de saut et les années non lapées. Les principales méthodes sont:
Formule de calcul de Kim Larson