Saya hanya mencoba untuk mengubah string tanggal menjadi objek DateTime di Java 8. Setelah menjalankan baris berikut:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime dt = LocalDateTime.parse("20140218", formatter);
Saya mendapatkan kesalahan berikut:
Exception in thread "main" java.time.format.DateTimeParseException:
Text '20140218' could not be parsed:
Unable to obtain LocalDateTime from TemporalAccessor:
{},ISO resolved to 2014-02-18 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
Sintaksnya identik dengan apa yang telah disarankan di sini , namun saya dilayani dengan pengecualian. Saya menggunakan JDK-8u25
.
java
datetime
java-8
datetime-format
retrography
sumber
sumber
LocalDate
dan tidakLocalDateTime
. Masalahnya adalah bahwa saya telah membuatDateTimeFormatter
penggunaan saya.withResolverStyle(ResolverStyle.STRICT);
, jadi saya harus menggunakan pola tanggaluuuuMMdd
alih-alihyyyyMMdd
(yaitu "tahun" bukannya "tahun-zaman")!Jika Anda benar-benar perlu mengubah tanggal menjadi objek LocalDateTime, Anda bisa menggunakan LocalDate.atStartOfDay (). Ini akan memberi Anda objek LocalDateTime pada tanggal yang ditentukan, memiliki bidang jam, menit dan kedua diatur ke 0:
sumber
LocalDateTime.from
tampaknya tidak perlu, karenaatStartOfDay()
sudah kembaliLocalDateTime
.Untuk apa nilainya jika ada orang yang membaca lagi topik ini (seperti saya), jawaban yang benar akan ada dalam
DateTimeFormatter
definisi, misalnya:Seseorang harus mengatur bidang opsional jika akan muncul. Dan sisa kode harus persis sama.
sumber
parseDefaulting
SETELAH yang Anda panggilappendPattern
. Kalau tidak, itu akan memberiDateTimeParseException
.Ini adalah pesan kesalahan yang benar-benar tidak jelas dan tidak membantu. Setelah banyak trial and error saya menemukan bahwa
LocalDateTime
akan memberikan kesalahan di atas jika Anda tidak mencoba untuk menguraikan waktu. Dengan menggunakanLocalDate
sebagai gantinya, ia bekerja tanpa kesalahan.Ini didokumentasikan dengan buruk dan pengecualian terkait sangat tidak membantu.
sumber
Memperluas jawaban retrography ..: Saya punya masalah yang sama bahkan ketika menggunakan
LocalDate
dan tidakLocalDateTime
. Masalahnya adalah bahwa saya telah membuatDateTimeFormatter
penggunaan saya.withResolverStyle(ResolverStyle.STRICT);
, jadi saya harus menggunakan pola tanggaluuuuMMdd
alih-alihyyyyMMdd
(yaitu "tahun" bukannya "tahun-zaman")!(Solusi ini awalnya adalah komentar untuk jawaban retrography, tetapi saya didorong untuk mempostingnya sebagai jawaban yang berdiri sendiri karena tampaknya bekerja dengan sangat baik bagi banyak orang.)
sumber
Bagi siapa saja yang mendarat di sini dengan kesalahan ini, seperti yang saya lakukan:
Unable to obtain LocalDateTime from TemporalAccessor: {HourOfAmPm=0, MinuteOfHour=0}
Itu berasal dari baris berikut:
Ternyata itu karena saya menggunakan pola Jam 12 jam pada jam 0, bukan pola 24 jam.
Mengubah pola jam menjadi 24 jam dengan menggunakan modal H memperbaikinya:
sumber
Jika tanggal String tidak termasuk nilai untuk jam, menit dan dll Anda tidak bisa langsung mengubahnya ke
LocalDateTime
. Anda hanya dapat mengubahnya menjadiLocalDate
, karena string hanya mewakili satu tahun, bulan dan tanggal komponen itu akan menjadi hal yang benar untuk dilakukan.Bagaimanapun Anda dapat mengonversikan ini menjadi
LocalDateTime
.sumber
yyyy-mm-dd
kapan seharusnyayyyy-MM-dd
.Coba yang ini:
Anda dapat menambahkan format apa pun yang Anda inginkan. Itu berhasil untuk saya!
sumber
Ini berfungsi dengan baik
keluaran:
sumber