Chcę przekonwertować java.util.Date
obiekt na String
język Java.
Format to 2010-05-30 22:15:52
java
date
formatting
java.util.date
nowicjuszPrgrmr
źródło
źródło
Date
w 2019 roku. Ta klasa jest źle zaprojektowana i długo przestarzała. Zamiast tego użyjInstant
lub innej klasy z java.time, nowoczesnego interfejsu API daty i godziny Java .Odpowiedzi:
Konwertuj datę na ciąg znaków, używając
DateFormat#format
metody:Od http://www.kodejava.org/examples/86.html
źródło
Calendar
zamiast zwykłegonew Date()
? Czy jest jakaś różnica?MM/dd/yyyy
Format jest głupie i zepsute. Nie używaj tego. Zawsze używajdd/MM/yyyy
lubyyyy-MM-dd
.yyyy-MM-dd
wszędzie, ale co możesz zrobić?).źródło
Commons-lang DateFormatUtils jest pełen gadżetów (jeśli masz wspólny język w swojej ścieżce klas)
źródło
null
kontroli.tl; dr
java.time
Współczesnym sposobem są klasy java.time, które teraz zastępują kłopotliwe, stare, klasowe klasy data-godzina.
Najpierw przekonwertuj
java.util.Date
naInstant
.Instant
Klasa reprezentuje moment na osi czasu w UTC o rozdzielczości nanosekund (do dziewięciu (9) cyfr ułamka dziesiętnego).Konwersje do / z java.time są wykonywane nowymi metodami dodanymi do starych klas.
Zarówno twój, jak
java.util.Date
ijava.time.Instant
są w UTC . Jeśli chcesz zobaczyć datę i godzinę jako UTC, niech tak będzie. Wywołanie wtoString
celu wygenerowania ciągu znaków w standardowym formacie ISO 8601 .W przypadku innych formatów musisz zmienić
Instant
je w bardziej elastyczneOffsetDateTime
.Zobacz, jak kod działa na żywo na IdeOne.com .
Aby uzyskać ciąg w żądanym formacie, określ
DateTimeFormatter
. Możesz określić niestandardowy format. Ale użyłbym jednego z predefiniowanych formatów (ISO_LOCAL_DATE_TIME
) i zamieniłemT
jego wynik na SPACJĘ.Nawiasem mówiąc, nie polecam tego rodzaju formatu, w którym celowo tracisz informacje o przesunięciu względem UTC lub strefie czasowej. Powoduje niejednoznaczność co do znaczenia wartości daty i godziny tego ciągu.
Uważaj również na utratę danych, ponieważ każda ułamkowa sekunda jest ignorowana (skutecznie obcinana) w reprezentacji ciągu znaków wartości daty i godziny.
Aby zobaczyć ten sam moment przez soczewkę zegara ściennego z określonego regionu , zastosuj a,
ZoneId
aby uzyskaćZonedDateTime
.Aby wygenerować sformatowany ciąg, tak samo jak powyżej, ale zastąpić
odt
zzdt
.Wykonując ten kod bardzo wiele razy, możesz być nieco bardziej wydajny i unikać połączeń z
String::replace
. Porzucenie tego połączenia powoduje również skrócenie kodu. W razie potrzeby określ własny wzorzec formatowania we własnymDateTimeFormatter
obiekcie. Buforuj tę instancję jako stałą lub element członkowski do ponownego użycia.Zastosuj ten formatyzator, przekazując instancję.
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te wyprzeć kłopotliwe starych klas Date-Time, takich jak
java.util.Date
,.Calendar
, ijava.text.SimpleDateFormat
.Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do java.time.
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień.
Duża część funkcji java.time została przeniesiona z powrotem do Java 6 i 7 w ThreeTen-Backport, a następnie dostosowana do Androida w ThreeTenABP (zobacz Jak korzystać… ).
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time.
źródło
Z
jest używany zamiast+00:00
domyślnie. Naprawiłem odpowiedź, dzięki. Dla waszej informacji oznacza to to samo:Z
wymawiane „Zulu” oznacza przesunięcie zero godzin-minut-sekund, tak samo jak+00:00
. ISO 8601 Standard obsługuje oba style.atOffset
metoda naInstant
klasy w Java 8. Patrz Javadoc:Instant::atOffset
. W Javie 8Instant.now().atOffset( ZoneOffset.UTC ).toString()
uruchomione zostanie podobne wywołanie . Sprawdź swojeimport
wyciągi. Sprawdź, czy Twój IDE / projekt jest skonfigurowany do uruchamiania Java 8 lub nowszej, a nie wcześniejszej wersji Java. Zobacz kod uruchamiany na żywo w IdeOne.com: ideone.com/2Vm2O5Alternatywne jedno-linijki w zwykłej Javie:
Używa Formatter i indeksowania względnego zamiast tego nie
SimpleDateFormat
jest bezpieczne dla wątków , btw.Nieco bardziej powtarzalne, ale wymaga tylko jednego stwierdzenia. W niektórych przypadkach może to być przydatne.
źródło
Dlaczego nie używasz Jody (org.joda.time.DateTime)? Zasadniczo jest to jedna linijka.
źródło
DateTime
.new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
Wygląda na to, że szukasz SimpleDateFormat .
Format: rrrr-MM-dd kk: mm: ss
źródło
HH
(0–23) jest częstsze.W jednym ujęciu;)
Aby uzyskać datę
Aby uzyskać czas
Aby uzyskać datę i godzinę
Miłego kodowania :)
ź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 .źródło
Najłatwiejszy sposób użycia to:
gdzie „rrrr-MM-dd'T'GG: mm: ss” jest formatem daty odczytu
wyjście: nie 14 kwietnia 16:11:48 EEST 2013
Uwagi: HH vs hh - HH odnosi się do formatu godziny 24h - hh odnosi się do formatu godziny 12h
źródło
Jeśli potrzebujesz tylko godziny od daty, możesz po prostu użyć funkcji Ciąg.
To automatycznie skróci część czasową ciągu i zapisze go wewnątrz
timeString
.źródło
Oto przykłady użycia nowego interfejsu API Java 8 Time do sformatowania starszej wersji
java.util.Date
:Fajnie
DateTimeFormatter
, że można go skutecznie buforować, ponieważ jest bezpieczny dla wątków (w przeciwieństwie doSimpleDateFormat
).Lista predefiniowanych szablonów i odniesienie do notacji wzoru .
Kredyty:
Jak parsować / formatować daty za pomocą LocalDateTime? (Java 8)
Java8 konwersja java.util.Date na java.time.ZonedDateTime
Sformatuj Instant to String
Jaka jest różnica między ZonedDateTime java 8 a OffsetDateTime?
źródło
Spróbuj tego,
Wynik:
Aby uzyskać więcej informacji na temat formatowania daty i godziny w Javie, zapoznaj się z linkami poniżej
Centrum pomocy Oracle
Przykład daty i godziny w Javie
źródło
źródło
Spróbujmy tego
Lub funkcja użyteczności
Z Konwertuj datę na ciąg w Javie
źródło
źródło
źródło
Opcja jednej linii
Ta opcja umożliwia łatwe zapisanie rzeczywistej daty w jednym wierszu.
źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek Oracle .2019-20-23 09:20:22
- miesiąc 20?) (2) Nie widzę, że odpowiedź zawiera wszystko, co nie zostało jeszcze uwzględnione w innych odpowiedziach. (3) Proszę, nie uczcie młodych, jak korzystać z dawno przestarzałej i notorycznie kłopotliwejSimpleDateFormat
klasy. Przynajmniej nie jako pierwsza opcja. I nie bez zastrzeżeń. Dzisiaj mamy o wiele lepszejava.time
, nowoczesne API daty i godziny Java oraz jegoDateTimeFormatter
.