Java DateFormat для точности 2 миллисекунды - PullRequest
4 голосов
/ 20 февраля 2012

У меня проблема с попыткой заставить библиотеку 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

Я мог бы просто проанализировать полученную строку и удалить ненужную цифру, но я надеялся, что для этого будет более чистый способ. Кто-нибудь знает, как заставить это работать, или почему это не работает?

Ответы [ 3 ]

4 голосов
/ 20 февраля 2012

Извините.В соответствии с javadoc

количество букв для числовых компонентов игнорируется, за исключением того, что необходимо разделить два смежных поля

... поэтому яне думаю, что есть прямой способ сделать это.

Я бы использовал отдельный формат только для SSS и позвонил бы substring(0, 2).

0 голосов
/ 20 февраля 2012

Я бы включил 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(...) - единственный способ.

0 голосов
/ 20 февраля 2012

Я не смог определить причину проблемы, но после замены формата даты на yoda сгенерированная строка времени имела правильное число секунд [только 2].

...