Pad DateTimeFormatter с талирующими нулями
Я создаю приложение, в котором пользователь выбирает дату и время в календаре, которые затем должны отображаться в текстовом поле в виде 26 цифр, дополняя дату завершающими нулями.
Таким образом, дата должна отображаться в следующем формате:
yyyyMMddHHmmssSSS000000000
Итак, после миллисекунды (SSS) я хочу заполнить строку 9 нулями. Проблема в том, что это кажется невозможным без добавления пробела между буквами шаблона и нулевыми константами.
Самое смешное, что если я сделаю DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS000000000")
Я получаю DateTimeParseException
, но строка на самом деле отформатирована как нужно в текстовом поле. Проблема заключается в том, что при окружении DateTimeFormatter
Eclipse говорит мне, что с блоком try-catch Unreachable catch block for DateTimeParseException. This exception is never thrown from the try statement body
потому что исключение выдается в некотором классе зависимости для моего текстового поля. Более того, кажется плохой практикой ловить ошибку, которая будет выдаваться при каждом выполнении кода.
DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS 000000000")
делает компиляцию Но мне действительно нужно, чтобы это была строка без пробелов.
Это возможно? Я сейчас пользуюсь java.time.format.DateTimeFormatter
, но если есть какой-то класс, расширяющий его, я думаю, что и с ним будет нормально. Хотя я бы предпочел избегать добавления дополнительных зависимостей.
2 ответа
Использование DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS'000000000'")
Используйте DateTimeFormatterBuilder с методом appendPattern
public DateTimeFormatterBuilder appendPattern(шаблон String)
Добавляет элементы, определенные указанным шаблоном, в конструктор.
Все буквы от '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