Mam String
reprezentującą randkę.
String date_s = "2011-01-18 00:00:00.0";
Chciałbym przekonwertować go na Date
i wydrukować w YYYY-MM-DD
formacie.
18.01.2011
Jak mogę to osiągnąć?
Ok, w oparciu o odpowiedzi, które uzyskałem poniżej, oto coś, czego próbowałem:
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
Ale wyprowadza 02011-00-1
zamiast pożądanego 2011-01-18
. Co ja robię źle?
java
string
date
formatting
date-format
amit4444
źródło
źródło
Odpowiedzi:
Użyj
LocalDateTime#parse()
(lubZonedDateTime#parse()
jeśli łańcuch zawiera część strefy czasowej), aby parsować aString
w określonym wzorze na aLocalDateTime
.Użyj
LocalDateTime#format()
(lubZonedDateTime#format()
), aby sformatować aLocalDateTime
doString
określonego wzorca.Lub , jeśli nie korzystasz jeszcze z Java 8, użyj
SimpleDateFormat#parse()
do przetworzeniaString
określonego wzorca naDate
.Służy
SimpleDateFormat#format()
do formatowania aDate
doString
określonego wzorca.Zobacz też:
Aktualizacja : zgodnie z nieudaną próbą: w wzorach rozróżniana jest wielkość liter . Przeczytaj
java.text.SimpleDateFormat
javadoc, co oznaczają poszczególne części. Oznacza to na przykładM
miesiące im
minuty. Ponadto istnieją lata czterocyfroweyyyy
, a nie pięćyyyyy
. Przyjrzyj się bliżej fragmentom kodu, które opublikowałem tutaj powyżej.źródło
Formatowanie jest rozróżniana więc używać MM za miesiąc nie mm (jest to na minutę) i rrrr Dla odniesienia można użyć następujących Cheatsheet.
Przykłady:
źródło
Odpowiedzią jest oczywiście utworzenie obiektu SimpleDateFormat i użycie go do parsowania ciągów do daty i formatowania dat do ciągów. Jeśli wypróbowałeś SimpleDateFormat i to nie działało, pokaż kod i ewentualne błędy.
Dodatek: „mm” w formacie String nie jest tym samym co „MM”. Użyj MM na miesiące, a mm na minuty. Ponadto rrrrr to nie to samo co rrrr. na przykład,:
źródło
hh
da ci godzinę w przedziale 1-12, musisz użyća
oprócz drukowania / parsowaniaAM
lubPM
. Aby wydrukować / parsować godzinę w zakresie 0–23, użyjHH
.Dlaczego po prostu tego nie użyć?
Jest to również inny sposób:
lub
Twoje zdrowie!
źródło
Korzystanie z
java.time
pakietu w Javie 8 i nowszych:źródło
[edytowany w celu uwzględnienia poprawek BalusC] Klasa SimpleDateFormat powinna załatwić sprawę :
źródło
DD
oznacza „dzień w roku”, a nie „dzień w miesiącu”.hh
oznacza „godzinę rano / wieczorem (1-12)”, a nie „godzinę dziennie (0–23)”.Inne odpowiedzi są poprawne, w zasadzie miałeś niepoprawną liczbę znaków „y” we wzorcu.
Strefa czasowa
Jeszcze jeden problem… Nie adresowałeś stref czasowych. Jeśli miałeś zamiar UTC , powinieneś to powiedzieć. Jeśli nie, odpowiedzi nie są kompletne. Jeśli wszystko, czego chcesz, to porcja daty bez czasu, to nie ma problemu. Ale jeśli wykonasz dalszą pracę, która może wymagać czasu, powinieneś określić strefę czasową.
Joda-Time
Oto ten sam rodzaj kodu, ale z wykorzystaniem biblioteki Joda-Time 2.3 innej firmy
Po uruchomieniu…
źródło
Zobacz „Wzorce daty i godziny” tutaj. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
źródło
źródło
źródło
źródło
Możesz po prostu użyć:
Działa idealnie!
źródło
Możesz także użyć substring ()
Jeśli chcesz wstawić spację przed datą, użyj
źródło
Możesz wypróbować nową Javę 8
date
, więcej informacji można znaleźć w dokumentacji Oracle .Lub możesz wypróbować stary
źródło
źródło
usuń jeden y
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
powinien byćSimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
źródło
DateTimeFormatter
się przestarzałegoSimpleDateFormat
).SimpleDateFormat dt1 = nowy SimpleDateFormat („rrrr-mm-dd”);
źródło
DateTimeFormatter
iDateTimeFormatterBuilder
. SugerowanieSimpleDateFormat
w 2019 roku to kiepska rada.hh
jest na godzinę.Powiedz, że chcesz zmienić 2019-12-20 10:50 GMT + 6: 00 na 2019-12-20 10:50 przede wszystkim musisz zrozumieć format daty. Pierwszy format daty to rrrr-MM-dd hh : mm a zzz i format drugiej daty to rrrr-MM-dd gg: mm a
po prostu zwróć ciąg z tej funkcji jak.
Ta funkcja zwróci twoją pożądaną odpowiedź. Jeśli chcesz dostosować więcej, po prostu dodaj lub usuń składnik z formatu daty.
źródło