Format Anda, YYYY-mm-dd'T'HH:MM:ss'Z'
tidak benar. Mari kita bahas semua yang salah dengan format ini.
- Anda telah menggunakan
Y
bukannyay
: SimbolY
digunakan untukWeek year
sementaray
digunakan untukYear
. Periksa Perbedaan antara tahun-tahun- era dan tahun berdasarkan minggu? untuk mempelajari lebih lanjut tentangnya. - Anda telah menggunakan
mm
untuk bulan: Simbol bulan yang benar adalahM
. - Anda telah menggunakan
MM
selama beberapa menit: Simbol yang benar untuk menit adalahm
. - Anda telah menyertakan
Z
dalam tanda kutip tunggal: Simbol,Z
digunakan untukTime zone
sedangkan'Z'
tidak lain adalah karakter literal. Mungkin Anda ingin memformat offset zona waktu+00:00
sebagaiZ
dan untuk ini, Anda sebenarnya harus menggunakanX
.
Jadi, format yang benar adalah sebagai berikut:
yyyy-MM-dd'T'HH:mm:ssX
Demo dengan format yang disarankan:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(sdf.format(date));
}
}
Keluaran:
2021-01-14T08:13:01Z
Perhatikan bahwa API tanggal-waktu java.util
dan API pemformatannya, SimpleDateFormat
sudah ketinggalan zaman dan rawan kesalahan. Disarankan untuk berhenti menggunakannya sepenuhnya dan beralih ke API tanggal-waktu modern
.
- Untuk alasan apa pun, jika Anda harus tetap menggunakan Java 6 atau Java 7, Anda dapat menggunakan Tiga Sepuluh-Backport yang mendukung sebagian besar java.time fungsionalitas untuk Java 6 &7.
- Jika Anda bekerja untuk proyek Android dan level API Android Anda masih belum sesuai dengan Java-8, periksa API Java 8+ tersedia melalui desugaring dan Cara menggunakan ThreeTenABP di Proyek Android .
Gunakan Date#toInstant
untuk mengonversi java.util.Date
objek (tipe lama) ke java.time.Instant
(tipe modern). Instant
mewakili titik seketika pada garis waktu dan seharusnya cukup untuk sebagian besar operasi JSON Anda. Instant#toString
mengembalikan string tanggal-waktu dengan offset zona waktu UTC yang sesuai dengan standar ISO-8601
.
Demo:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Instant instant = date.toInstant();
// Print the value of instant#toString
System.out.println(instant);
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
System.out.println(odt);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}
Keluaran:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z