Saya memiliki konstruktor SimpleDateFormat sebagai
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
dan saya parsing string "2013-09-29T18:46:19Z".
Saya telah membaca bahwa di sini Z mewakili GMT/UTC
zona waktu. tetapi ketika saya mencetak tanggal ini di konsol, ia mencetak IST timezne untuk tanggal yang dikembalikan.
Sekarang pertanyaan saya adalah apakah output saya benar atau salah?
java
date
timezone
date-format
simpledateformat
Pradip Borde
sumber
sumber
Jawaban:
Anda belum menetapkan zona waktu hanya menambahkan a
Z
ke akhir tanggal / waktu, sehingga akan terlihat seperti tanggal / waktu GMT tetapi ini tidak mengubah nilai.Atur zona waktu ke GMT dan itu akan benar.
sumber
'T'
dan'Z'
dianggap di sini sebagai konstanta. Anda harus lulusZ
tanpa tanda kutip. Selain itu, Anda perlu menentukan zona waktu dalam string input.Contoh:
2013-09-29T18:46:19-0700
Dan format sebagai"yyyy-MM-dd'T'HH:mm:ssZ"
sumber
-0700
adalah zona waktu yaitu -7: 00 JamDari ISO 8601 String ke Java Date Object
jika Anda tidak mengatur
TimeZone.getTimeZone("GMT")
maka itu akan ditampilkanSun Sep 29 18:46:19 CST 2013
Dari Java Date Object ke ISO 8601 String
Dan untuk mengkonversi
Date
objek ke ISO 8601 Standard (yyyy-MM-dd'T'HH:mm:ss'Z'
) gunakan kode berikutPerhatikan juga bahwa tanpa
' '
pada Zyyyy-MM-dd'T'HH:mm:ssZ
mencetak2015-01-22T03:41:02+0000
sumber
JIKA Anda ingin menangani ' standar ' JSON representasi Tanggal kemudian lebih baik menggunakan pola ini:
"yyyy-MM-dd'T'HH:mm:ssX"
.Perhatikan
X
bagian akhir. Ini akan menangani zona waktu dalam standar ISO 8601 , dan ISO 8601 adalah persis apa yang menghasilkan pernyataan ini dalam Javascriptnew Date().toJSON()
Dibandingkan dengan jawaban lain, ada beberapa manfaatnya:
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sumber
play
penjilidan formulir otomatis, dan menggunakan@Format.DateTime
anotasi. Gunakan pola default denganZ
di akhir tampaknya tidak benar. Setelah diubah menjadiX
, itu berfungsi. Terima kasih banyaktl; dr
Jawaban lainnya sudah ketinggalan zaman pada Java 8.
ISO 8601
Format string Anda kebetulan mematuhi standar ISO 8601 . Standar ini mendefinisikan format yang masuk akal untuk mewakili berbagai nilai waktu tanggal sebagai teks.
waktu java
Kelas lama
java.util.Date
/.Calendar
danjava.text.SimpleDateFormat
telah digantikan oleh kerangka java.time dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial . Hindari kelas lama karena terbukti tidak dirancang, membingungkan, dan merepotkan.Bagian dari desain yang buruk di kelas lama telah menggigit Anda, di mana
toString
metode ini menerapkan zona waktu default JVM saat ini ketika menghasilkan representasi teks dari nilai tanggal-waktu yang sebenarnya dalam UTC (GMT); bermaksud baik tetapi membingungkan.Kelas java.time menggunakan format ISO 8601 secara default ketika mem-parsing / menghasilkan representasi tekstual dari nilai-nilai tanggal-waktu. Jadi tidak perlu menentukan pola penguraian.
Suatu
Instant
saat di timeline di UTC .Anda dapat menerapkan zona waktu sesuai kebutuhan untuk menghasilkan
ZonedDateTime
objek.sumber
dan jika Anda tidak memiliki opsi untuk menggunakan java8 lebih baik gunakan 'yyyy-MM-dd'T'HH: mm: ssX XX ' karena ini akan diuraikan dengan benar lagi (sementara dengan hanya satu X ini mungkin tidak demikian. ..tergantung pada fungsi parsing Anda)
X menghasilkan: +01
XXX menghasilkan: +01: 00
sumber
Untuk Java 8: Anda dapat menggunakan inbuilt
java.time.format.DateTimeFormatter
untuk mengurangi kemungkinan kesalahan pengetikanISO_ZONED_DATE_TIME mewakili
2011-12-03T10:15:30+01:00[Europe/Paris]
adalah salah satu format DateTime standar yang disediakan oleh tautan Oraclesumber