簡體   English   中英

Java DateFormat,精度為2毫秒

[英]Java DateFormat for 2 millisecond precision

我有一個問題,試圖讓DateFormat庫給我一個字符串,日期要格式化為2毫秒而不是通常的3.我意識到這更像是在厘秒線上,但是afaik Java不支持。

這是一些代碼,以顯示我遇到的問題。 我希望它輸出到兩毫秒,但它輸出三。

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);
}}

輸出:

1973-11-29T21:33:09.123Z

我可以解析生成的字符串並刪除我不想要的數字,但我希望有更簡潔的方法來實現這一點。 有誰知道如何使這個工作,或為什么它不工作?

抱歉。 根據javadoc

數字組件的字母數被忽略,除非需要分隔兩個相鄰的字段

......所以我認為沒有直接的方法可以做到這一點。

我將僅為SSS使用單獨的格式並調用substring(0, 2)

我無法推斷出問題發生的原因,但在用yoda替換日期格式后,生成的時間字符串具有正確的秒數[僅為2]。

我會包括Joda Time並使用類似的東西:

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());
}

如果你不想要額外的依賴,我認為從.format(...)結果字符串是唯一的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM