Dieser Artikel teilt gemeinsame Methoden des Kalenderzeitbetriebs. Der spezifische Inhalt ist wie folgt
Paketstest; importieren java.text.SimpledateFormat; import Java.util.calendar; Import Java.util.date;/** * Gemeinsame Methoden des Datums und Kalenders wurden viele Datumsmethoden abgeschrieben, daher ist der Kalendar der Hauptklasse der Hauptkalendern. {// Verwenden Sie das Datum direkt, um die aktuelle Systemzeit zu erhalten, Ergebnis: Di Mai 03 08:25:44 CST 2016Date Datum = neues Datum (); // Viele Methoden im Datum, z. // Es wird empfohlen, stattdessen verschiedene Methoden des Kalenders anzuwenden, sodass keine Datensätze vorgenommen wurden // Die Millisekunden des angegebenen Datums erhalten, mit dem häufig die Größen von zwei Daten verglichen werden. Datum.getTime (); // Verwenden Sie den Kalender, um die aktuelle Systemzeit zu erhalten. Sie müssen das Kalenderobjekt abrufen und in Datumsausgangskalender Kalender umwandeln Der Standard -Ersttag der Woche ist Sonntag Kalender Jahr, Monat und Tag, Ausgabeergebnis: Mo 03. Juni 09:31:59 CST 2013 // Verwandte üblicherweise verwendete überlastete Methoden: Kalender.Set (Jahr, Monat, Datum, Hourofday, Minute); // Kalender.Set (Jahr, Monat, Datum, Stunde, Minute, Minute, Sekunde); Alle Parameter sind intcalendar.set (2013, 5, 3); System.out.println (Calendar.getTime (); // Verwenden Sie den Kalender, um ein Jahr zu setzen, Ausgabeergebnis: Fr. Jun 03 09:42:43 CST 2011Calendar.set (Kalender. 09:45:32 CST 2011Calendar.set (Calendar.month, 0); System.out.println (Kalender.getime ()); // Setzen Sie den Monat mit Kalender und seinen eigenen Konstanten, beachten Sie, dass der Monat um 0 beginnt. Calendar.february); 5); system.out.println (Calendar.getTime ()); // Setzen Sie den Stunde Kalender.set (Calendar.Hour.Hour, 15); System.out.println (calendar.getTime (); // Calendar Time nach der Anzahl der Millisekunden Calendar.Settimeinmill (0); // Date, das String-Ergebnis: 2016-05-03-03 (0); 09: 25: 29string fordate = DateToString (neues Datum ()); System.out.println (Fordate); // String bisher, Ausgabeergebnis: Thu 12. November 13:23:11 CST 2015Date Strdate = StringTodate ("2015-12 13:23:11"). 2015Calendar calendar2 = dateToCalendar(strDate);System.out.println(calendar2.get(1));}/*** Convert the specified date type time to a string in the specified format * * @author: tuzongxun* @Title: dateToString* @param @param date* @return void* @date May 3, 2016 9:09:25 AM* @throws*/static String datetoString (Datum Datum) {String str = "yyyy-mm-dd hh: mm: ss"; SimpleDateFormat Format = new SimpleDateFormat (str); String dateFormat = format.format (Datum); Rückgabedatumformat;}/*** convertation the String-Datum in dem angegebenen Datum in dem angegebenen Datum. StringTodate* @param @param String* @return void* @date 3. Mai 2016 9:16:38 AM* @ausschläffern*/static Date StringTodat (String String) {String st = "yyyyy-mm-dd hh: mm: ss"; SimpleDateFormat = new SimpledateMat (staTh); (Ausnahme E) {E.getStackTrace ();} Rückgabedatum;}/*** Konvertieren Sie das angegebene Datum des Datums auf Kalendertyp** @Author: Tuzongxun* @title: DateTocalendar* @param @param Date* @return void* @date 3, 2016. Mai 9:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13. Calendar = Calendar.getInstance (); Calendar.Settime (Datum); Rückgabekalender;}}Welche anderen Fallstricke gibt es?
Wo ist die Grube:
In einem Projekt, auf das ich zuvor gestoßen bin, habe ich eine Funktion involviert: Verschieben Sie einige Daten jeden Tag auf eine andere Sammlung von MongoDB -Datenbanken, dh die Tabellen der relationalen Datenbank. Dieser Sammlungsname ist ein fester Name plus Jahr und Monat, an dem sich das aktuelle Datum vor zwei Monaten befindet.
Diese Funktion existierte, bevor ich mit diesem Projekt in Kontakt kam, eine Funktion, die von meinen früheren Kollegen implementiert wurde, und schrieb eine Java -Timing -Aufgabe.
Dieser Kollegen ist nicht mehr in unserem Unternehmen, aber vor kurzem stellte er fest, dass diese Funktion einige Probleme hat. Die Datenbewegung ist nicht wie erwartet. Die Daten, die im Februar hätten existieren sollen, erschienen in der Januar -Tabelle.
Die Wurzel der Grube:
Die mongoDB-bezogenen Probleme werden von mir vorübergehend beibehalten, und dieses Problem muss natürlich von mir gelöst werden, also nahm ich seinen Code heraus und las ihn. Infolgedessen wurde festgestellt, dass das Problem die relevanten Kalendermethoden ist.
Um Daten von vor zwei Monaten zu übertragen, müssen Sie zuerst das Datum vor zwei Monaten erhalten. Der relevante Code zum Generieren des Tabellennamens lautet wie folgt:
private String getDatAcollectionName () {Calendar calendar = calendar.getInstance (); try {calendar.set (Calendar.date, -day); zurück "alarm_" + toolutils.datetoformatstrdate (calendar.getTime (), "yyyy_mm"); } catch (Ausnahme e) {logger.Eror ("{}: Datentransformation fehlgeschlagen, {}", this.getClass (). getName (), e.getMessage ()); } return null; }Das Problem liegt in der festgelegten Kalendermethode, einschließlich der späteren Start- und Endzeit der Abfragendaten, und das gleiche wird verwendet.
Auf den ersten Blick scheint diese Methode das Datum auf das aktuelle Datum abzüglich der angegebenen Anzahl von Tagen festzulegen, aber tatsächlich ist das Ergebnis nicht so erwartet, wie Sie das Datum vor zwei Monaten erhalten würden (der Tag hier definiert 60, dh zwei Monate).
Füllen Sie die Grube aus:
Nachdem ich den Grund gefunden hatte, habe ich diese Methode ersetzt und mich auf das Hinzufügen geändert. Was die Parameter im Inneren betrifft, wurde es nicht bewegt. Das Ergebnis hat bewiesen, dass diese Methode die aktuelle Funktion wirklich realisieren kann, und das erhaltene Ergebnis ist genau das erwartete Ergebnis.
Natürlich können Sie die Parameter auch geringfügig ändern, ohne die Methode zu ändern, z.
Das obige Abschluss dreht sich alles um diesen Artikel, und ich hoffe, dass es für alle hilfreich sein wird, die gängigen Methoden des Kalenderzeitbetriebs zu beherrschen.