Go олл-ин java .time, современный Java API данных и времени.
DateTimeFormatter dateAndTimeFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm", Locale.ROOT);
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault());
String currentDateAndTime = zdt.format(dateAndTimeFormat);
System.out.println(currentDateAndTime);
Когда я только что запустил код, используя часовой пояс Pacific / Honolulu в качестве своего по умолчанию вывод был:
01-05-2020 08: 47
Что пошло не так в вашем коде?
Две вещи были неверны:
- A
LocalDate
- это просто дата без времени дня, поэтому вы не сможете отформатировать ее в строку, включающую часы дня и минуты. Вместо этого используйте ZonedDateTime
, OffsetDateTime
или LocalDateTime
. - . Хорошо использовать
LocalDate
или другой класс из java .time, современный Java API даты и времени. Современные классы и устаревшие SimpleDateFormat
не работают вместе. Для форматирования объекта даты и / или времени из java .time вам необходимо использовать современный класс DateTimeFormatter
. Это хорошо, потому что SimpleDateFormat
- общеизвестно хлопотный класс, который вы не должны использовать ни при каких обстоятельствах. Что нас обманывает, так это то, что ваш код фактически скомпилирован, что создает впечатление, что он должен работать. Это никогда не было предназначено. SimpleDateFormat
наследует метод format(Object)
от Format
, общего суперкласса для форматирования многих типов объектов, поэтому аргумент объявляется как Object
, а не Date
(другой устаревший класс).