Welche Datumsformate sind in der SimpleDateFormat-Klasse verfügbar?

82

Kann mich jemand über die in der SimpleDateFormat-Klasse verfügbaren Datumsformate informieren?

Ich habe API durchlaufen, konnte aber keine zufriedenstellende Antwort finden. Jede Hilfe wird sehr geschätzt.

Abhishek_Mishra
quelle
3
Nach welchem ​​Format suchen Sie? Sie müssen ein Format erstellen , das aus den benötigten Elementen besteht.
David Grant
3
Sie können jedes Format erstellen, das die API zulässt. Es gibt keine endgültige Liste.
Peter Lawrey

Antworten:

137

Datums- und Uhrzeitformate werden im Folgenden ausführlich beschrieben

SimpleDateFormat (Java Platform SE 7) - Datums- und Zeitmuster

Es kann eine nAnzahl von Formaten geben, die Sie möglicherweise erstellen können. ex - dd/MM/yyyyoder YYYY-'W'ww-uoder Sie können die Buchstaben mischen und anpassen, um das gewünschte Muster zu erzielen. Musterbuchstaben sind wie folgt.

  • G - Epochenbezeichner (AD)
  • y - Jahr (1996; 96)
  • Y - Wochenjahr (2009; 09)
  • M - Monat im Jahr (Juli; Juli; 07)
  • w - Woche im Jahr (27)
  • W - Woche im Monat (2)
  • D - Tag im Jahr (189)
  • d - Tag im Monat (10)
  • F - Wochentag im Monat (2)
  • E - Tagesname in der Woche (Dienstag; Di)
  • u - Wochentag Nummer (1 = Montag, ..., 7 = Sonntag)
  • a - AM / PM-Marker
  • H - Stunde am Tag (0-23)
  • k - Stunde am Tag (1-24)
  • K - Stunde in morgens / abends (0-11)
  • h - Stunde in morgens / abends (1-12)
  • m - Minute in Stunde (30)
  • s - Zweiter in Minute (55)
  • S - Millisekunde (978)
  • z - Allgemeine Zeitzone (Pacific Standard Time; PST; GMT-08: 00)
  • Z - Zeitzone RFC 822 (-0800)
  • X - Zeitzone ISO 8601 (-08; -0800; -08: 00)

Zum Parsen:

2000-01-23T04: 56: 07.000 + 0000

Verwenden: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Subhrajyoti Majumder
quelle
Danke Quoi. Aber können Sie mir bitte mitteilen, wie ich Daten in verschiedene Standards wie EST, IST, gdt, gmt usw. konvertieren kann?
Abhishek_Mishra
1
Dann suchen Sie nach einem Datum in einem anderen Gebietsschema. SimpleDateFormatErlaube das Festlegen des Gebietsschemas am Konstruktor. SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder
OK, das ist etwas, wonach ich gesucht habe. Danke Quoi. :)
Abhishek_Mishra
Ich schätze Ihre Offenheit. :)
Subhrajyoti Majumder
Verwechseln Sie nicht Z und 'Z'. Ich war dumm und ich hoffe, dass niemand anders so ist wie ich.
Tiefan Ju
52

Lassen Sie mich einen Beispielcode herauswerfen, den ich von http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html erhalten habe. Dann können Sie mit verschiedenen Optionen herumspielen, bis Sie ihn verstanden haben.

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
   public static void main(String[] args) {
       Date now = new Date();

       //This is just Date's toString method and doesn't involve SimpleDateFormat
       System.out.println("toString(): " + now);  // dow mon dd hh:mm:ss zzz yyyy
       //Shows  "Mon Oct 08 08:17:06 EDT 2012"

       SimpleDateFormat dateFormatter = new SimpleDateFormat("E, y-M-d 'at' h:m:s a z");
       System.out.println("Format 1:   " + dateFormatter.format(now));
       // Shows  "Mon, 2012-10-8 at 8:17:6 AM EDT"

       dateFormatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
       System.out.println("Format 2:   " + dateFormatter.format(now));
       // Shows  "Mon 2012.10.08 at 08:17:06 AM EDT"

       dateFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy");
       System.out.println("Format 3:   " + dateFormatter.format(now));
       // Shows  "Monday, October 8, 2012"

       // SimpleDateFormat can be used to control the date/time display format:
       //   E (day of week): 3E or fewer (in text xxx), >3E (in full text)
       //   M (month): M (in number), MM (in number with leading zero)
       //              3M: (in text xxx), >3M: (in full text full)
       //   h (hour): h, hh (with leading zero)
       //   m (minute)
       //   s (second)
       //   a (AM/PM)
       //   H (hour in 0 to 23)
       //   z (time zone)
       //  (there may be more listed under the API - I didn't check)

   }

}}

Viel Glück!

Roy
quelle
6

java.time

AKTUALISIEREN

Die anderen Fragen sind veraltet. Die schrecklichen Legacy-Klassen, wie sie vor SimpleDateFormatJahren durch die modernen Java.time- Klassen ersetzt wurden.

Benutzerdefiniert

Zum Definieren Ihrer eigenen benutzerdefinierten Formatierungsmuster sind die Codes in DateTimeFormatterähnlich, aber nicht genau identisch mit den Codes in SimpleDateFormat. Lesen Sie unbedingt die Dokumentation. Suchen Sie im Stapelüberlauf nach vielen Beispielen.

DateTimeFormatter f = 
    DateTimeFormatter.ofPattern( 
        "dd MMM uuuu" , 
        Locale.ITALY 
    ) 
;

Standard ISO 8601

Die Norm ISO 8601 definiert Formate für viele Arten von Datums- und Uhrzeitwerten. Diese Formate sind für den Datenaustausch konzipiert und können sowohl maschinell analysiert als auch vom Menschen kulturübergreifend leicht gelesen werden.

Die Klassen java.time verwenden standardmäßig ISO 8601-Formate, wenn Zeichenfolgen generiert / analysiert werden. Rufen Sie einfach die toString& parseMethoden auf. Sie müssen kein Formatierungsmuster angeben.

Instant.now().toString()

2018-11-05T18: 19: 33.017554Z

Für einen Wert in UTC bedeutet das Zam Ende UTC und wird „Zulu“ ausgesprochen.

Lokalisieren

Anstatt ein Formatierungsmuster anzugeben, können Sie java.time automatisch für Sie lokalisieren lassen. Verwenden Sie die DateTimeFormatter.ofLocalized…Methoden.

Erhalten Sie den aktuellen Moment mit der Wanduhrzeit, die von den Menschen einer bestimmten Region (einer Zeitzone) verwendet wird.

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ZonedDateTime.now( z );

Generieren Sie Text im Standardformat ISO 8601, der sinnvoll erweitert wurde, um den Namen der Zeitzone in eckigen Klammern anzuhängen.

zdt.toString (): 2018-11-05T19: 20: 23.765293 + 01: 00 [Afrika / Tunis]

Generieren Sie automatisch lokalisierten Text.

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );

String output = zdt.format( f );

Ausgabe: lundi 5 novembre 2018 à 19:20:23 heure normale d'Europe centrale

Im Allgemeinen ist es besser, automatisch zu lokalisieren, als sich mit fest codierten Formatierungsmustern zu ärgern.


Über java.time

Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date, Calendar, & SimpleDateFormat.

Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .

Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*Klassen. Hibernate 5 und JPA 2.2 unterstützen java.time .

Woher bekomme ich die java.time-Klassen?

Basil Bourque
quelle
5

Überprüfen Sie die Formate hier http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Main

System.out.println("date  : " + new classname().getMyDate("2014-01-09 14:06", "dd-MMM-yyyy E hh:mm a z", "yyyy-MM-dd HH:mm"));

Methode

 public String getMyDate(String myDate, String returnFormat, String myFormat)
            {
                DateFormat dateFormat = new SimpleDateFormat(returnFormat);
                Date date=null;
                String returnValue="";
                try {
                    date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
                    returnValue = dateFormat.format(date);
                } catch (ParseException e) {
                    returnValue= myDate;
                    System.out.println("failed");
                    e.printStackTrace();
                }

            return returnValue;
            }
Rinuthomaz
quelle