Java stellt die Datumsklasse im Java.util -Paket an, das das aktuelle Datum und die aktuelle Uhrzeit enthält.
Die Datumsklasse unterstützt zwei Konstruktoren. Der erste Konstruktor initialisiert das aktuelle Datum und die Uhrzeit des Objekts.
Datum( )
Der folgende Konstruktor empfängt einen Parameter, der der Anzahl der Millisekunden seit Mitternacht am 1. Januar 1970 entspricht
Datum (lange Millisec)
Sobald ein verfügbares Datumsobjekt vorhanden ist, können Sie eine der folgenden unterstützten Methoden aufrufen, um die Zeit zu verwenden:
| Sn | Methoden und Beschreibungen |
|---|---|
| 1 | booleschen nach (Datum) Rückgabe true, wenn das Anrufdatumobjekt oder später als das angegebene Datum enthält, ansonsten kehren Sie falsch zurück. |
| 2 | booleschen vor (Datum Datum) Rückgabe true, wenn das Anrufdatum Objekt oder früher als das vom Datum angegebene Datum enthält. Andernfalls geben Sie false zurück. |
| 3 | Objektklone () Wiederholen Sie den Anruf zum Datumsobjekt. |
| 4 | int vergleicheto (Datum) Vergleichen Sie den Wert des Anrufobjekts mit dem Datum. Wenn diese beiden Werte gleich sind, geben Sie 0 zurück. Gibt einen negativen Wert zurück, wenn das Anrufobjekt früher als das Datum ist. Gibt einen positiven Wert zurück, wenn das Anrufobjekt später als das Datum ist. |
| 5 | int vergleicheto (Objekt obj) Verwenden Sie den gleichen Vergleichsvorgang (Datum), wenn OBJ ein Klassendatum ist. Andernfalls wirft es eine ClassCastException aus. |
| 6 | booleschen gleich (Objektdatum) Rückgabe true, wenn das Anrufdatum das gleiche Zeit und das gleiche Datum enthält, das ansonsten false zurückgibt. |
| 7 | lange Getzeit () Gibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 vergangen sind. |
| 8 | int Hashcode () Gibt den Hash -Code des aufrufenden Objekts zurück. |
| 9 | Leere (lange Zeit) Legt die angegebene Zeit fest, die die in Millisekunden abgesetzte Zeit ab Mitternacht am 1. Januar 1970 darstellt. |
| 10 | String toString () Rufen Sie das Datumsobjekt an, um in eine Zeichenfolge umzuwandeln und das Ergebnis zurückzugeben. |
importieren java.util.date; public class datemo {public static void main (String args []) {// Instantiert ein Datumsdatum des Datums des Datums = neuer Datum (); // Datum und Datum mit toString () system.out.println (Datum.toString ()) anzeigen; }}Dies führt zu den folgenden Ergebnissen:
Mo 04. Mai 09:51:52 CDT 2009
Datumsvergleich
Es gibt drei Möglichkeiten, zwei Daten zu vergleichen:
Formatdaten mit SimpledateFormat
SimpleDateFormat ist eine konkrete Klasse, die lokal zur Formatierung und Umwandlung von Daten verwendet wird. SimpledateFormat ermöglicht die Auswahl der benutzerdefinierten Schemas bis zum Zeitpunkt des Datums und des Zeitpunkts. Zum Beispiel:
Java.util importieren.*; import Java.Text. SimpleDateFormat ft = new SimpledateFormat ("e yyyy.mm.dd" at 'HH: MM: ss a zzz "); System.out.println ("aktuelles Datum:" + ft.format (dnow)); }}Dies führt zu den folgenden Ergebnissen:
Aktuelles Datum: Sun 2004.07.18 um 04:14:09 PDT
Einfacher DateFormat -Formatcode
Verwenden Sie eine Zeitmusterzeichenfolge, um ein Zeitformat anzugeben. In diesem Muster werden alle ASCII -Buchstaben als Musterbuchstaben beibehalten, die wie folgt definiert sind:
| Charakter | beschreiben | Beispiel |
|---|---|---|
| G | Zeitanzeige | ANZEIGE |
| y | Vierstellige Jahre | 2001 |
| M | Mitte des Jahresmonats | Juli oder 07 |
| D | Datum des Monats | 10 |
| H | Zeit am/pm (1 ~ 12) | 12 |
| H | Stunde am Tag (0 ~ 23) | Zweiundzwanzig |
| M | Minuten von Stunden | 30 |
| S | Sekunden von Minuten | 55 |
| S | Millisekunde | 234 |
| E | Der Wochentag | Dienstag |
| D | Der Tag des Jahres | 360 |
| F | Der Tag der Woche im Monat | 2 (zweiter Mi. im Juli) |
| w | Mitte des Jahres Woche | 40 |
| W | Woche des Monats | 1 |
| A | AM/PM -Marker | PM |
| k | Stunde am Tag (1 ~ 24) | vierundzwanzig |
| K | Stunden am/pm (0 ~ 11) | 10 |
| z | Zeitzone | Eastern Standardzeit |
| '' | Text hinterlassen | Abgrenzer |
| " | Einzelne Zitate | ` |
importieren java.util.date; public class datemo {public static void main (String args []) {// Instantiert ein Datumsdatum des Datums des Datums = neuer Datum (); // Zeit und Datum anzeigen mit toString () string str = string.format ("aktuelles Datum/Uhrzeit: %tc", Datum); System.out.printf (str); }}Dies führt zu den folgenden Ergebnissen:
Aktuelles Datum/Uhrzeit: Sa 15. Dezember 16:37:57 MST 2012
Es ist eine schlechte Praxis, die mehrfache Formatierung von Daten bereitzustellen. Eine Formatzeichenfolge kann den Index der zu formatierten Parameter angeben.
Der Index muss sofort von % gefolgt werden und muss durch $ beendet werden. Zum Beispiel:
importieren java.util.date; public class datemo {public static void main (String args []) {// Instantiert ein Datumsdatum des Datums des Datums = neuer Datum (); // Anzeigezeit und Datum mit toString () system.out.printf (" %1 $ S %2 $ TB %2 $ TD, %2 $ ty", "Fälligkeitsdatum:", Datum); }}Dies führt zu den folgenden Ergebnissen:
Fälligkeitsdatum: 09. Februar 2004
Alternativ kann das <Flag verwendet werden. Es bedeutet die gleichen Parameter und sollte nach den obigen Formatspezifikationen erneut verwendet werden. Zum Beispiel:
importieren java.util.date; public class datemo {public static void main (String args []) {// Instantiert ein Datumsdatum des Datums des Datums = neuer Datum (); // Formatiertes Datum system.out.printf (" %S %Tb %<te, %<ty", "Fälligkeitsdatum:", Datum); }}Dies führt zu den folgenden Ergebnissen:
Fälligkeitsdatum: 09. Februar 2004
Date- und Zeitkonvertierungsfiguren
| Charakter | beschreiben | Beispiel |
|---|---|---|
| C | Komplettes Datum und Uhrzeit | Mo 04. Mai 09:51:52 CDT 2009 |
| F | ISO 8601 Datum | 2004-02-09 |
| D | US -Formatzeit (Monat/Tag/Jahr) | 02/09/2004 |
| T | 24-mal-System | 18:05:19 |
| R | 12-maliges System | 06:05:19 Uhr |
| R | 24-mal-System, keine Sekunden | 18:05 |
| Y | Vierstelliges Jahr (mit der ersten Zeile Nullsspalte) | 2004 |
| y | Die letzten zwei Ziffern des Jahres (unter Verwendung der ersten Zeile Null -Spalte) | 04 |
| C | Die ersten beiden Ziffern des Jahres (unter Verwendung der ersten Zeile -Zero -Spalte) | 20 |
| B | Vollmonatiger Name | Februar |
| B | Abkürzung Monat Name | Feb |
| M | Zwei-stellige Monate (unter Verwendung der ersten Zeile-Zeile-Null-Spalte) | 02 |
| D | Zweistelliger Datum (mit der Spalte der ersten Zeile Null) | 03 |
| e | Doppelte Zifferndatum (keine Spalte vorwärts Null) | 9 |
| A | Vollwoche Name | Montag |
| A | Abkürzung des Wochennamens | Mon |
| J | Dreistellige Tage in der Mitte des Jahres (mit der ersten Zeile Null-Spalte) | 069 |
| H | Zweistellige Stunden (unter Verwendung der ersten Zeile Null-Spalte) zwischen 00 und 23 | 18 |
| k | Zweistellige Stunden (keine Spalte vorwärts Null), zwischen 0 und 23 | 18 |
| ICH | Zweistellige Stunden (mit der ersten Zeile Null-Spalte) zwischen 01 und 12 | 06 |
| l | Zweistellige Stunden (keine Spalte vorwärts Null), zwischen 1 und 12 | 6 |
| M | Zwei-stellige Minuten (verwenden Sie die erste Spalte Zeile Null) | 05 |
| S | Zweistellige Sekunden (verwenden Sie die erste Zeile-Zeile-Null-Spalte) | 19 |
| L | Dreistellige Millisekunden (unter Verwendung der ersten Zeile-Zero-Spalte) | 047 |
| N | Neun-stellige Nanosekunden (unter Verwendung der ersten Zeile-Zero-Spalte) | 047000000 |
| P | Kapitalisierung Nachmittagsmarke | PM |
| P | Kleinbuchstaben Nachmittagsmarke | PM |
| z | RFC 822 -Offset von der GMT -Nummer | -0800 |
| Z | Zeitzone | Pst |
| S | Sekunden vom 1970-01-01 00:00:00 GMT | 1078884319 |
| Q | GMT von 1970-01-01 00:00:00 | 1078884319047 |
String -Konvertierungsdatum
Die SimpleDateFormat -Klasse verfügt über einige zusätzliche Methoden wie Parse (), die versucht, eine Zeichenfolge basierend auf dem Format des in einem bestimmten SimpleDateFormat gespeicherten Objekts zu konvertieren. Zum Beispiel:
Java.util importieren.*; import Java.Text. String input = args.length == 0? "1818-11-11": Args [0]; System.out.print (Eingabe + "pariert als"); Datum t; try {t = ft.Parse (Eingabe); System.out.println (t); } catch (ParseException e) {System.out.println ("unvergleichlich mit" + ft); }}}Das laufende Beispiel des obigen Programms erzeugt die folgenden Ergebnisse:
$ java datedemo1818-11-11 Parse als Mi 11 00:00:00 GMT 1818 $ Java datedemo 2007-12-012007-12-01 Parse als Sa. Dezember 01 00:00:00 GMT 2007
Für eine Weile schlafen
Sie können jederzeit während des Winterschlafes von einer Millisekunde bis zum gesamten Lebenszyklus Ihres Computers durchführen. Beispielsweise schläft das folgende Programm 10 Sekunden lang:
Java.util importieren. Thread.Sleep (5*60*10); System.out.println (neues Date () + "/n"); } catch (Ausnahme e) {System.out.println ("Eine Ausnahme!"); }}}Dies führt zu den folgenden Ergebnissen:
Sonne Mai 03 18:04:41 GMT 2009Sun 03. Mai 18:04:51 GMT 2009
Ausführungszeit messen
Manchmal können die Zeitpunkte, die gemessen werden können, in Millisekunden sein. Schreiben wir also das obige Beispiel erneut um:
Java.util importieren. System.out.println (neues Date () + "/n"); Thread.Sleep (5*60*10); System.out.println (neues Date () + "/n"); Long End = System.currentTimemillis (); langer diff = Ende - Start; System.out.println ("Differenz ist:" + diff); } catch (Ausnahme e) {System.out.println ("Eine Ausnahme!"); }}}Dies führt zu den folgenden Ergebnissen:
Sonne Mai 03 18:16:51 GMT 2009Sun
Gregoriancalendar -Klasse
Gregoriancalendar ist eine konkrete Implementierung der Kalenderklasse, dh die Implementierung des normalen Gregorianischen Gregorianischen Gregorianers, mit dem Sie vertraut sind. Die Kalenderklasse wird in diesem Tutorial nicht besprochen, sondern die Standard -Java -Dokumentation.
Die GetInStance () -Methode von Calendar gibt einen Gregoriancalendar zurück, der mit dem aktuellen Datum und der Uhrzeit -Standard -Gebietsschema und der Zeitzone initialisiert wurde. Zwei Felder sind in Gregoriancalendar definiert: AD und BC. Diese repräsentieren zwei im Gregorianischen Kalender definierte Epochen.
Es gibt auch mehrere Konstruktoren von Gregoriancalendar -Objekten:
| Sn | Konstruktorbeschreibung |
|---|---|
| 1 | Gregoriancalendar () Konstruieren Sie den Standard -Gregoriancalendar mit der aktuellen Zeit in der Standardzeitzone mit dem Standardgebiet. |
| 2 | Gregoriancalendar (int Jahr, int Monats, int Datum) Legen Sie das Standardgebiet in der Standardzeitzone fest, um einen Gregoriancalendar mit dem angegebenen Datum zu erstellen |
| 3 | Gregoriancalendar (int Jahr, int Monat, int Datum, int Stunde, int Minute) Konstruiert einen Gregoriancalendar mit dem angegebenen Datum und der an der Standardzeitzone festgelegten Zeit mit dem Standardgebietsschema. |
| 4 | Gregoriancalendar (INT -Jahr, int Monat, int Datum, int Stunde, int Minute, int Sekunde) Konstruieren Sie einen Gregoriancalendar mit dem angegebenen Datum und dem an die Standardzeitzone festgelegten Zeitpunkt mit dem Standardgebietsschema |
| 5 | Gregoriancalendar (Alokale des Gebietsschale) Erstellen Sie einen Gregoriancalendar basierend auf der aktuellen Zeit und der Standardzeitzone des angegebenen Gebietsschemas. |
| 6 | Gregoriancalendar (Timezone Zone) Basierend auf der aktuellen Zeit wird in einer bestimmten Zeitzone ein Gregoriancalendar mit dem Standardgebietsschema gebaut. |
| 7 | Gregoriancalendar (Timezone Zone, Alocale des Gebietsschale) Ein Gregoriancalendar basiert auf der aktuellen Zeit und der angegebenen Zeitzone des angegebenen Gebiets. |
| Sn | Methoden und Beschreibungen |
|---|---|
| 1 | void add (int field, intmenge) Eine kalendarbasierte Regel fügt dem angegebenen Zeitfeld eine angegebene Zeit (signierte) Zeit hinzu. |
| 2 | geschützte Hohlraum -Computefields () Konvertieren Sie UTC in den Feldwert von Millisekundenzeit. |
| 3 | geschützte void computerTime () Überschreibe Millisekunden, in denen der Kalender den Zeitdomänenwert umwandelt, ist UTC. |
| 4 | booleschen gleich (Objekt OBJ) Dieser Gregoriancalendar wird mit einer Objektreferenz verglichen. |
| 5 | int get (int field) Erhält den Wert der angegebenen Zeitdomäne. |
| 6 | int getactualMaximum (int Feld) Gibt den maximal möglichen Wert des Feldes zurück, der dem aktuellen Datum gegeben wird. |
| 7 | int getactualminimum (int Feld) Gibt den Mindestwert zurück, den das Feld angesichts des aktuellen Datums hat. |
| 8 | int getGreatestminimum (int Feld) Gibt den hohen und niedrigsten Wert (falls eine Änderung vorhanden) für das angegebene Feld zurück. |
| 9 | Datum getregregorianchange () Holen Sie sich das Datum der Änderung im Gregorianischen Kalender. |
| 10 | int getleastmaximum (int field) Gibt den niedrigsten Maximalwert für das angegebene Feld zurück, wenn sich eine Änderung vorliegt. |
| 11 | int getmaximum (int field) Gibt den Maximalwert im angegebenen Feld zurück. |
| 12 | Date GetTime () Holen Sie sich die aktuelle Zeit des Kalenders. |
| 13 | langes GetTimeInmillis () Die aktuelle Zeit, um den Kalender zu bekommen. |
| 14 | Timezone GetTimeZone () Holen Sie sich die Zeitzone. |
| 15 | int getminimum (int field) Gibt den Mindestwert im angegebenen Feld zurück. |
| 16 | int Hashcode () Schreiben Sie Hashcode neu. |
| 17 | boolean isleapyear (int Jahr) Bestimmt, dass ein bestimmtes Jahr ein Schaltjahr ist. |
| 18 | Hohlrolle (int field, boolean up) Fügen Sie eine Einheit im Feld gegebener Zeit hinzu oder subtrahieren Sie (Up/Down) Zeit (nach oben/unten), ohne das größere Feld zu ändern. |
| 19 | void set (int field, int value) Legt das Zeitfeld mit dem angegebenen Wert fest. |
| 20 | void Set (int Jahr, int Monat, int Datum) Setzen Sie den Wert von Jahr, Monat und Tag. |
| Einundzwanzig | void Set (int Jahr, int Monat, int Datum, int Stunde, int Minute) Setzen Sie sich auf Jahr, Monat, Tag, Stunde und Minute. |
| Zweiundzwanzig | void Set (int Jahr, int Monat, int Datum, int Stunde, int Minute, int zweiter) Setzen Sie sich den Wert von Jahr, Monat, Tag, Stunde, Minute und Sekunde des Feldes. |
| Dreiundzwanzig | void setgregorianchange (Datum) Legen Sie das Änderungsdatum von Gregoriancalendar fest. |
| vierundzwanzig | void set time (Datum Datum) Legt die aktuelle Zeit und das angegebene Datum des Kalenders fest. |
| 25 | void setTimeInmillis (Long Millis) Stellen Sie die aktuelle Zeit des Kalenders aus dem angegebenen langen Wert fest. |
| 26 | void setTimezone (Zeitzonwert) Legt die Zeitzone mit dem angegebenen Zeitzonenwert fest. |
| 27 | String toString () Gibt die String -Darstellung dieses Kalenders zurück. |
Import Java.util.*; öffentliche Klasse Gregoriancalendardemo {public static void main (String args []) {String Monate [] = {"Jan", "feb", "mar", "Apr", "May", "Jun", "Jul", "Aug", "SEP", "Oktober", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov. int Jahr; // Erstellen Sie einen Gregoriancalendar initialisiert // mit dem aktuellen Datum und der aktuellen Uhrzeit im Standardgebietsschema und im Standard -Gebietsschema und im TimeZone. Gregoriancalendar Gcalendar = neuer Gregoriancalendar (); // Die aktuellen Zeit- und Datumsinformationen anzeigen. System.out.print ("Datum:"); System.out.print (Monate [gcalendar.get (calendar.month)]); System.out.print ("" + gcalendar.get (calendar.date) + ""); System.out.println (Jahr = gcalendar.get (Calendar.year)); System.out.print ("Zeit:"); System.out.print (gcalendar.get (calendar.hour) + ":"); System.out.println (gcalendar.get (calendar.minute) + ":"); System.out.println (gcalendar.get (calendar.second)); // Test, wenn das laufende Jahr ein Schaltjahr ist, wenn (gcalendar.isleapyear (Jahr)) {System.out.println ("Das laufende Jahr ist ein Schaltjahr"); } else {System.out.println ("Das laufende Jahr ist kein Schaltjahr"); }}}Dies führt zu den folgenden Ergebnissen:
Datum: 22. April 2009Time: 11: 25: 27Die aktuelles Jahr ist kein Schaltjahr
Kalender -Applet
Schauen wir uns einen Kalender -Applet an. Hier verwenden wir die traditionelle MVC -Struktur, um drei Kategorien zu entwerfen: Kalender, Kalendercontroller und Kalender.
CalendarViewer.java verarbeitet hauptsächlich die Benutzeroberfläche, verwendet vorhandenen Code, organisiert ihn und extrahiert die Geschäftslogik, damit sie sich auf die Anzeigeschichtverarbeitung konzentriert.
Calendarviewer.java
CalendarViewer öffentlicher Klasse erweitert JWindow implementiert ActionListener {JPanel CalendaryMpanel = null; Jbutton links = new Jbutton ("<<"); Jbutton rightbutton = new Jbutton (">>"); Label YearLabel = New Label (); Label monatlabel = new Label (); Label passdayslabel = new Label (); Jpanel calendarwdpanel = null; // ist der gesamte Einschlusskörper von Calendar_Week und Calendar_Days JPanel Calendarweekpanel Jbutton Quitbutton = New Jbutton ("Close"); Border leerBorder = borderFactory.CreateEemptyBorder (); CalendarController ccontroller = neuer calendarController (); public CalendarViewer () {Super (); Buildui (); } public void Buildui () {Buildtoppanel (); BuildCenterpanel (); BuildBottompanel (); setLayout (neuer 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) {Swingutilities.invokelater (new Runnable () {public void run () {new CalendarViewer ();}}); }}Die UI -Struktur ist hauptsächlich in 3 Blöcke unterteilt, die den drei Feldern in der oberen, mittleren und unteren Figur entsprechen.
Die Verarbeitung des Ereignishörens wird durch die folgende Methode abgeschlossen.
Das ereignisbasierte UI-Update erfolgt durch die folgenden beiden Methoden.
updateDayspanel (); UpdatepasseddaySlabel (); CalendarController.java befasst sich hauptsächlich mit einer spezifischen Geschäftslogik, während einige Kalenderalgorithmus -Logik, die nicht mit der spezifischen Anwendung in Bezug auf die spezifische Anwendung verwendet werden, an calendarmodel.java übergeben werden. Calendarmodel.javapublic Class Calendarmodel {private int DayTab [] [] = {{{0, 31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31}}}; public boolean isleapyear (int Jahr) {Return ((Jahr % 4 == 0 && Jahr % 100! = 0) || Jahr % 400 == 0); } public int tayofyear (int tag, int monat, int year) {int lap = isleapyear (Jahr)? 1: 0; für (int i = 1; i <monat; i ++) Tag+= DayTab [sprung] [i]; Rückkehrtag; } public int DaysOfMonth (int Monat, int Jahr) {int lap = isleapyear (Jahr)? 1: 0; Kehren Sie Daytab zurück [Leap] [Monat]; } public int Dayofweek (int Day, int Monat, int Jahr) {if (monat == 1) {Monat = 13; Jahr--; } if (monat == 2) {Monat = 14; Jahr--; } return (Tag + 2 * Monat + 3 * (Monat + 1) / 5 + Jahr + Jahr / 4 - Jahr / 100 + Jahr / 400) % 7 + 1; }}Erstellen Sie ein zweidimensionales Array, das die Anzahl der Tage pro Monat für Schaltjahre bzw. Nicht-Leap-Jahre darstellt. Die Hauptmethoden sind:
Kim Larson -Berechnungsformel