Jakie formaty dat są dostępne w klasie SimpleDateFormat?

83

Czy ktoś może mi powiedzieć o formatach dat dostępnych w klasie SimpleDateFormat.

Przeszedłem przez interfejs API, ale nie mogłem znaleźć satysfakcjonującej odpowiedzi. Każda pomoc jest bardzo mile widziana.

Abhishek_Mishra
źródło
3
Jaki format szukasz? Musisz zbudować format składający się z potrzebnych elementów.
David Grant
3
Możesz stworzyć dowolny format, na jaki pozwala API. Nie ma ostatecznej listy.
Peter Lawrey

Odpowiedzi:

139

Formaty daty i czasu są dobrze opisane poniżej

SimpleDateFormat (Java Platform SE 7) - wzorce daty i czasu

Może istnieć nwiele formatów, które możesz stworzyć. ex - dd/MM/yyyylub YYYY-'W'ww-umożesz mieszać i dopasowywać litery, aby uzyskać wymagany wzór. Litery wzorów są następujące.

  • G - Oznacznik ery (AD)
  • y - Rok (1996; 96)
  • Y - Tydzień Rok (2009; 09)
  • M - Miesiąc w roku (lipiec; lipiec; 07)
  • w - Tydzień w roku (27)
  • W - Tydzień w miesiącu (2)
  • D - Dzień w roku (189)
  • d - Dzień w miesiącu (10)
  • F - Dzień tygodnia w miesiącu (2)
  • E - Nazwa dnia w tygodniu (wtorek; wtorek)
  • u - Numer dnia tygodnia (1 = poniedziałek, ..., 7 = niedziela)
  • a - znacznik AM / PM
  • H - Godzina w dzień (0-23)
  • k - Godzina w dzień (1-24)
  • K - Godzina am / pm (0-11)
  • h - Godzina am / pm (1-12)
  • m - Minuta w godzinie (30)
  • s - Sekunda w minucie (55)
  • S - Milisekunda (978)
  • z - Ogólna strefa czasowa (Pacific Standard Time; PST; GMT-08: 00)
  • Z - Strefa czasowa RFC 822 (-0800)
  • X - Strefa czasowa ISO 8601 (-08; -0800; -08: 00)

Do analizowania:

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

Posługiwać się: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Subhrajyoti Majumder
źródło
Dzięki, Quoi .. Ale czy mógłbyś mi powiedzieć, jak mogę zamienić daty na różne standardy, takie jak EST, IST, gdt, gmt itp.?
Abhishek_Mishra
1
W takim razie szukasz randki w innym miejscu. SimpleDateFormatpozwalają na ustawienie locale w konstruktorze. SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder
OK, to jest coś, czego szukałem .. Dzięki Quoi .. :)
Abhishek_Mishra
Doceniam twoją otwartość. :)
Subhrajyoti Majumder
Nie myl Z i „Z”. Byłem głupi i mam nadzieję, że nikt inny nie będzie taki jak ja.
Tiefan Ju
52

Wyrzucę przykładowy kod, który otrzymałem z http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html. Następnie możesz bawić się różnymi opcjami, dopóki go nie zrozumiesz.

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)

   }

}

Powodzenia!

Roy
źródło
6

java.time

AKTUALIZACJA

Inne pytania są przestarzałe. Okropne klasy spuścizny, które SimpleDateFormatzostały wyparte lata temu przez współczesne klasy java.time .

Zwyczaj

Aby zdefiniować własne niestandardowe wzorce formatowania, kody w programie DateTimeFormattersą podobne, ale nie dokładnie takie same, jak kody w programie SimpleDateFormat. Koniecznie przestudiuj dokumentację. I wyszukaj wiele przykładów przepełnienia stosu.

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

Standard ISO 8601

Standard ISO 8601 definiuje formaty dla wielu typów wartości daty i godziny. Formaty te są przeznaczone do wymiany danych, można je łatwo analizować maszynowo, a także łatwo odczytywać przez ludzi z różnych kultur.

W java.time klas używać formatów ISO 8601 domyślnie podczas generowania / parsowania ciągów. Po prostu wywołaj metody toString& parse. Nie ma potrzeby określania wzorca formatowania.

Instant.now().toString()

2018-11-05T18: 19: 33.017554Z

Dla wartości w UTC, Zna końcu oznacza UTC i wymawia się go jako „Zulu”.

Zlokalizować

Zamiast określać wzorzec formatowania, możesz pozwolić java.time na automatyczną lokalizację. Skorzystaj z DateTimeFormatter.ofLocalized…metod.

Uzyskaj aktualny moment dzięki zegarowi ściennemu używanemu przez mieszkańców określonego regionu (strefy czasowej).

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

Generuj tekst w standardowym formacie ISO 8601, mądrze rozszerzonym o dodanie nazwy strefy czasowej w nawiasach kwadratowych.

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

Wygeneruj automatycznie zlokalizowany tekst.

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

String output = zdt.format( f );

wyjście: lundi 5 listopada 2018 r. do 19:20:23 heure normale d'Europe centrale

Generalnie lepszą praktyką jest automatyczne lokalizowanie zamiast martwienia się zakodowanymi na stałe wzorcami formatowania.


Informacje o java.time

Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date, Calendar, i SimpleDateFormat.

Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .

Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .

Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani java.sql.*klas. Hibernate 5 i JPA 2.2 obsługują java.time .

Skąd wziąć klasy java.time?

Basil Bourque
źródło
5

sprawdź formaty tutaj http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Główny

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"));

metoda

 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
źródło