Saya mencoba memformat Instan ke String menggunakan java 8 time-api dan pola baru:
Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);
Dengan menggunakan kode di atas, saya mendapatkan Pengecualian yang mencakup bidang yang tidak didukung:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
at java.time.Instant.getLong(Instant.java:608)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
...
yyyy-MM-dd hh:mm:ss
format:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss").withZone(ZoneId.of("Europe/Paris"));
sumber
Ini menghemat Anda dari keharusan mengonversi ke UTC. Namun, kerangka waktu beberapa bahasa lain mungkin tidak mendukung milidetik sehingga Anda harus melakukannya
sumber
The
Instant
kelas tidak mengandung informasi Zone, hanya toko timestamp dalam milidetik dari UNIX zaman, yaitu 1 1070 Jan dari UTC. Jadi, formatter tidak dapat mencetak tanggal karena tanggal selalu dicetak untuk zona waktu konkret. Anda harus mengatur zona waktu ke formatter dan semua akan baik-baik saja, seperti ini:sumber
Atau jika Anda masih ingin menggunakan formatter yang dibuat dari pola, Anda bisa menggunakan LocalDateTime alih-alih Instan:
sumber
Instan sudah dalam UTC dan sudah memiliki format tanggal default yyyy-MM-dd . Jika Anda senang dengan itu dan tidak ingin mengacaukan zona waktu atau pemformatan, Anda bisa juga
toString()
melakukannya:Tidak ingin T dan Z? (Z menunjukkan tanggal ini adalah UTC. Z adalah singkatan dari "Zulu" alias "Zero hour offset" alias UTC):
Ingin milidetik, bukan nanodetik? (Jadi, Anda dapat memasukkannya ke kueri sql):
dll.
sumber
Saya percaya ini mungkin membantu, Anda mungkin perlu menggunakan semacam variasi tanggal lokal bukan instan
sumber