Mam datę jako ciąg znaków w następującym formacie "04/02/2011 20:27:05"
. Korzystam z biblioteki Joda-Time i chciałbym przekonwertować ją na DateTime
obiekt. Zrobiłem:
DateTime dt = new DateTime("04/02/2011 20:27:05")
Ale pojawia się następujący błąd:
Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"
Jak przekonwertować powyższą datę na DateTime
obiekt?
java.time
pakietu w Javie 8, spróbuj użyćLocalDateTime.parse
lubInstant.parse
.Odpowiedzi:
Użyj
DateTimeFormat
:źródło
toString
funkcji, ale nie można analizować z nim:Invalid format: "31. Januar 2013 06:38:08 MEZ" is malformed at "MEZ"
. Czy to znany problem? Jak mogę tego uniknąć? Pozdrowienia.Wiem, że to stare pytanie, ale chciałem dodać, że od wersji JodaTime 2.0 możesz to zrobić za pomocą jednej linijki:
źródło
źródło
Z komentarzy wybrałem odpowiedź podobną do dodania TimeZone:
źródło
Twój format nie jest oczekiwanym formatem ISO, powinieneś spróbować
źródło
Możesz także użyć SimpleDateFormat , jak w
DateTimeFormat
źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są już starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i Javę 9. Zobacz samouczek Oracle . A klasy java.time są bezpieczne dla wątków, w przeciwieństwie do klas starszych.Potrzebujesz DateTimeFormatter odpowiedniego dla używanego formatu. Przejrzyj dokumenty, aby uzyskać instrukcje, jak je zbudować.
Bez mankietu, myślę, że potrzebujesz
format = DateTimeFormat.forPattern("M/d/y H:m:s")
źródło
tl; dr
java.time
Nowoczesne podejście wykorzystuje klasy java.time, które zastępują czcigodny projekt Joda-Time .
Analizuj jako a,
LocalDateTime
ponieważ w danych wejściowych brakuje jakiegokolwiek wskaźnika strefy czasowej lub przesunięcia względem UTC.Wskazówka: tam, gdzie to możliwe, użyj standardu ISO 8601 formatów , wymieniając wartości daty i godziny jako tekst, a nie format tutaj widoczny. Dogodnie, klasy java.time używają standardowych formatów podczas parsowania / generowania ciągów.
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do java.time klas .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Gdzie można uzyskać 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
Prosta metoda:
źródło
Istnieją dwa sposoby, to może być osiągnięte .
DateTimeFormat
SimpleDateFormat
źródło
SimpleDateFormat
jest złe, w mojej najbardziej uczciwej opinii.