Pertanyaan Java DateFormat untuk 2 milidetik presisi


Saya mengalami masalah dengan mencoba mendapatkan pustaka DateFormat untuk memberi saya String dengan tanggal yang akan diformat dengan 2 milidetik daripada yang biasa 3. Saya menyadari ini lebih di sepanjang garis centi-detik, tapi afaik Java tidak mendukung itu.

Berikut ini beberapa kode untuk menunjukkan masalah yang saya hadapi. Saya berharap untuk menghasilkan dua milidetik, tetapi hasilnya tiga.

public class MilliSeconds {
private static final String DATE_FORMAT_2MS_Digits = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'";
private static DateFormat dateFormat2MsDigits = new SimpleDateFormat(DATE_FORMAT_2MS_Digits);

public static void main( String[] args ){
    long milliseconds = 123456789123l;
    System.out.println(formatDate2MsDigits(new Date(milliseconds)));
}

public static String formatDate2MsDigits(Date date)
{
    dateFormat2MsDigits.setCalendar(Calendar.getInstance(new SimpleTimeZone(0, "GMT")));
    return dateFormat2MsDigits.format(date);
}}

output:

1973-11-29T21: 33: 09.123Z

Saya hanya bisa mem-parsing string yang dihasilkan dan menghapus digit yang tidak saya inginkan, tetapi saya berharap akan ada cara yang lebih bersih untuk mencapai ini. Apakah ada yang tahu cara membuatnya berfungsi, atau mengapa tidak berfungsi?


4
2018-02-20 16:12


asal


Jawaban:


Maaf. Menurut javadoc 

jumlah huruf untuk komponen angka diabaikan kecuali itu   diperlukan untuk memisahkan dua bidang yang berdekatan

... jadi saya rasa tidak ada cara langsung untuk melakukannya.

Saya hanya akan menggunakan format terpisah untuk SSS dan telepon substring(0, 2).


3
2018-02-20 16:26



Saya belum bisa menyimpulkan mengapa masalah terjadi, tetapi setelah mengganti format tanggal dengan yoda, string waktu yang dihasilkan memiliki jumlah angka yang benar [hanya 2].


0
2018-02-20 16:25



Saya akan menyertakan Joda Time dan gunakan sesuatu seperti:

private static final String DATE_FORMAT_2MS_FMT = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'";

private static final DateTimeFormatter DATE_FORMAT_2MS_DIGITS = DateTimeFormat
        .forPattern(DATE_FORMAT_2MS_FMT).withZoneUTC();

public static String formatDate2MsDigits(Date date) {
    return DATE_FORMAT_2MS_DIGITS.print(date.getTime());
}

Jika Anda tidak ingin ketergantungan tambahan, saya pikir memutar-mutar string hasil dari .format(...) adalah satu-satunya jalan.


0
2018-02-20 16:48