Pad DateTimeFormatter с трейлинговыми нулями

Я создаю приложение, в котором пользователь выбирает дату и время в календаре, которые затем должны отображаться в текстовом поле как 26 цифр, дополняя дату нулями в конце.

Таким образом, дата должна отображаться в следующем формате:

yyyyMMddHHmmssSSS000000000

Итак, после миллисекунды (SSS) я хочу заполнить строку 9 нулями. Проблема в том, что это невозможно без добавления пробела между буквами шаблона и нулевыми константами.

Самое смешное, что если я делаю DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS000000000"), я получаю DateTimeParseException, но на самом деле строка форматируется в текстовом поле как нужно. Проблема в том, что при окружении экземпляра DateTimeFormatter блоком try-catch Eclipse сообщает мне Unreachable catch block for DateTimeParseException. This exception is never thrown from the try statement body, потому что исключение вызывается в каком-то классе зависимостей для моего текстового поля. Более того, кажется плохой практикой отлавливать ошибку, которая будет выдаваться каждый раз при выполнении кода.

DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS 000000000") компилируется. Но мне действительно нужно, чтобы это была строка без пробелов.

Это возможно? В настоящее время я использую java.time.format.DateTimeFormatter, но если есть какой-то класс, расширяющий его, думаю, его тоже можно использовать. Хотя я бы предпочел избегать добавления дополнительных зависимостей.


person Jonatan Stenbacka    schedule 03.11.2015    source источник
comment
Ну, я только что понял, что что-то еще сделало меня исключением. Я попробовал DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS'000000000'"), но, поскольку исключение осталось, я отклонил эту попытку. Я просто отмечу @Ken Geis как правильный ответ.   -  person Jonatan Stenbacka    schedule 04.11.2015


Ответы (2)


Используйте 1_

person Ken Geis    schedule 03.11.2015

Используйте DateTimeFormatterBuilder с appendPattern метод

общедоступный DateTimeFormatterBuilder appendPattern (шаблон строки)

Добавляет элементы, определенные указанным шаблоном, в построитель.

Все буквы от «A» до «Z» и от «a» до «z» зарезервированы как буквы шаблона. Символы «#», «{» и «}» зарезервированы для использования в будущем. Символы '[' и ']' обозначают необязательные шаблоны.

Вы можете использовать его следующим образом:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
public class TimeFormatteTest {
    public static void main(String[] args){
        DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();
        dtfb.append(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        dtfb.appendPattern("000000000");
        DateTimeFormatter dtf = dtfb.toFormatter();
        System.out.println(dtf.format(LocalDateTime.now()));
    }
}

Вывод будет в виде:

20151104003532968000000000
person Ortomala Lokni    schedule 03.11.2015