Mam java.util.Date
w formacie yyyy-mm-dd
. Chcę, żeby był w formaciemm-dd-yyyy
Poniżej znajduje się przykładowe narzędzie, które wypróbowałem dla tej konwersji:
// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to java.util.Date
Date dt = sm.parse(strDate);
Nadal otrzymuję dane wyjściowe nie w formacie mm-dd-yyyy
.
Daj mi znać, jak sformatować java.util.Date
od yyyy-mm-dd
domm-dd-yyyy
java
date
date-format
user182944
źródło
źródło
yyyy-mm-dd
.Odpowiedzi:
Date
jest pojemnikiem na liczbę milisekund od epoki Uniksa (00:00:00 czasu UTC 1 stycznia 1970 r.).Nie ma koncepcji formatu.
Java 8+
LocalDateTime ldt = LocalDateTime.now(); System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt)); System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt)); System.out.println(ldt);
Wyjścia ...
05-11-2018 2018-05-11 2018-05-11T17:24:42.980
Java 7-
Powinieneś korzystać z ThreeTen Backport
Oryginalna odpowiedź
Na przykład...
Date myDate = new Date(); System.out.println(myDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate)); System.out.println(myDate);
Wyjścia ...
Wed Aug 28 16:20:39 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 16:20:39 EST 2013
Żadne z formatowania nie zmieniło podstawowej
Date
wartości. Taki jest celDateFormatter
sZaktualizowano o dodatkowy przykład
Na wypadek, gdyby pierwszy przykład nie miał sensu ...
W tym przykładzie zastosowano dwa elementy formatujące do sformatowania tej samej daty. Następnie używam tych samych elementów formatujących, aby przeanalizować
String
wartości z powrotem doDate
s. Wynikowa analiza nie zmienia sposobuDate
zgłaszania swojej wartości.Date#toString
to tylko zrzut zawartości. Nie możesz tego zmienić, ale możesz sformatowaćDate
obiekt w dowolny sposóbtry { Date myDate = new Date(); System.out.println(myDate); SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd"); // Format the date to Strings String mdy = mdyFormat.format(myDate); String dmy = dmyFormat.format(myDate); // Results... System.out.println(mdy); System.out.println(dmy); // Parse the Strings back to dates // Note, the formats don't "stick" with the Date value System.out.println(mdyFormat.parse(mdy)); System.out.println(dmyFormat.parse(dmy)); } catch (ParseException exp) { exp.printStackTrace(); }
Które wyjścia ...
Wed Aug 28 16:24:54 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 00:00:00 EST 2013 Wed Aug 28 00:00:00 EST 2013
Uważaj także na wzorce formatu. Przyjrzyj się bliżej,
SimpleDateFormat
aby upewnić się, że nie używasz niewłaściwych wzorców;)źródło
SimpleDateFormat("MM-dd-yyyy");
zamiast
SimpleDateFormat("mm-dd-yyyy");
dlatego
MM points Month
,mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate);
źródło
java.util.Date
?„M” (wielka) reprezentuje miesiąc, a „m” (prosta) reprezentuje minuty
Jakiś przykład od miesięcy
'M' -> 7 (without prefix 0 if it is single digit) 'M' -> 12 'MM' -> 07 (with prefix 0 if it is single digit) 'MM' -> 12 'MMM' -> Jul (display with 3 character) 'MMMM' -> December (display with full name)
Jakiś przykład na minuty
'm' -> 3 (without prefix 0 if it is single digit) 'm' -> 19 'mm' -> 03 (with prefix 0 if it is single digit) 'mm' -> 19
źródło
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Detale
Jak wspomniano wcześniej,
Date
klasa nie ma formatu. Od początku 1970 roku liczony jest w milisekundach czasu UTC. Nieskrępowany.java.time
Inne odpowiedzi używają kłopotliwych starych klas daty i czasu, teraz zastąpionych przez klasy java.time.
Jeśli masz
java.util.Date
, przekonwertuj naInstant
obiekt.Instant
Klasa reprezentuje moment na osi czasu w UTC z rozdzielczością nanosekund (do dziewięciu (9) cyfr ułamka dziesiętnego).Strefa czasowa
Inne odpowiedzi pomijają kluczową kwestię strefy czasowej. Określenie daty wymaga podania strefy czasowej. W dowolnym momencie data różni się na całym świecie według strefy. Kilka minut po północy w Paryżu Francja to nowy dzień, podczas gdy w Montrealu Québec wciąż trwa „wczoraj”.
Zdefiniuj strefę czasową, według której chcesz mieć kontekst dla swojego
Instant
.ZoneId z = ZoneId.of( "America/Montreal" );
Zastosuj,
ZoneId
aby uzyskaćZonedDateTime
.LocalDate
Jeśli zależy Ci tylko na dacie bez pory dnia, wyodrębnij plik
LocalDate
.Aby wygenerować ciąg znaków w standardowym formacie ISO 8601, RRRR-MM-DD, po prostu zadzwoń
toString
. Klasy java.time używają domyślnie standardowych formatów podczas generowania / analizowania ciągów.Jeśli chcesz mieć format MM-DD-RRRR, zdefiniuj wzorzec formatowania.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ); String output = localDate.format( f );
Zwróć uwagę, że w kodach wzorców formatowania rozróżniana jest wielkość liter. Kod w pytaniu nieprawidłowo użyty
mm
(minuta godziny) zamiastMM
(miesiąc roku).Użyj tego samego
DateTimeFormatter
obiektu do analizy. Klasy java.time są bezpieczne dla wątków, więc można przechowywać ten obiekt i używać go wielokrotnie, nawet w wielu wątkach.LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
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
, iSimpleDateFormat
.Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
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 .
Skąd wziąć klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak
Interval
,YearWeek
,YearQuarter
, i więcej .źródło
Jest to proste użycie poniżej kodów.
final Date todayDate = new Date(); System.out.println(todayDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate)); System.out.println(todayDate);
źródło
Możesz otrzymać dzień, miesiąc i rok i możesz je łączyć lub możesz użyć formatu MM-dd-rrrr, jak podano poniżej.
Date date1 = new Date(); String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1); System.out.println("Formatted Date 1: " + mmddyyyy1); Date date2 = new Date(); Calendar calendar1 = new GregorianCalendar(); calendar1.setTime(date2); int day1 = calendar1.get(Calendar.DAY_OF_MONTH); int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11} int year1 = calendar1.get(Calendar.YEAR); String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1); System.out.println("Formatted Date 2: " + mmddyyyy2); LocalDateTime ldt1 = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy3 = ldt1.format(format1); System.out.println("Formatted Date 3: " + mmddyyyy3); LocalDateTime ldt2 = LocalDateTime.now(); int day2 = ldt2.getDayOfMonth(); int mont2= ldt2.getMonthValue(); int year2= ldt2.getYear(); String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2); System.out.println("Formatted Date 4: " + mmddyyyy4); LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy5 = ldt3.format(format2); System.out.println("Formatted Date 5: " + mmddyyyy5); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); int day3 = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE int month3= calendar2.get(Calendar.MONTH) + 1; int year3 = calendar2.get(Calendar.YEAR); String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3); System.out.println("Formatted Date 6: " + mmddyyyy6); Date date3 = new Date(); LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd int day4 = ld1.getDayOfMonth(); int month4= ld1.getMonthValue(); int year4 = ld1.getYear(); String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4); System.out.println("Formatted Date 7: " + mmddyyyy7); Date date4 = new Date(); int day5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth(); int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue(); int year5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear(); String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5); System.out.println("Formatted Date 8: " + mmddyyyy8); Date date5 = new Date(); int day6 = Integer.parseInt(new SimpleDateFormat("dd").format(date5)); int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5)); int year6 = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5)); String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here` System.out.println("Formatted Date 9: " + mmddyyyy9);
źródło
Zmień miesiąc z małym „mm” na duże „MM”. W celach informacyjnych poniżej znajduje się przykładowy kod.
Date myDate = new Date(); SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate); Date dt = sm.parse(strDate); System.out.println(strDate);
źródło
zobacz te ...
data formatowania
DateTimeFormatter
data analizy
Natychmiastowa ze strefą
źródło