Я просматривал библиотеку Date and Time в Java 8, и мне было интересно, есть ли способ отформатировать дату в локальном формате независимо от того, где запускается программа (например, с использованием локального формата региона, в котором установлен компьютер).
Библиотека даты и времени использует класс LocalDate для получения даты. При использовании LocalDate.now()
по умолчанию используется формат гггг-ММ-дд.
Это можно отформатировать с помощью DateTimeFormatter следующим образом:
DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date = LocalDate.now().format(dtFormatter);
К сожалению, это полностью зависит от шаблона, который я ввожу в методе ofPattern(pattern)
.
Существует также метод ofPattern(pattern, locale)
, который позволяет использовать локаль, однако использование следующего кода не форматирует, как хотелось бы, поскольку он не преобразует дата в американском формате MM-dd-yyyy:
DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy", Locale.US);
LocalDate date = LocalDate.now().format(dtFormatter);
Если бы это сработало, я бы попробовал использовать Locale.getDefault()
. К сожалению, это ничего не меняет.
Итак, есть ли способ использовать библиотеку даты и времени Java 8 для преобразования даты в формат, используемый местоположением, в котором программа работает в данный момент. Например, если бы я был в США, я бы получил формат ММ-дд-гггг; но если бы языковой стандарт моего компьютера был установлен на Великобританию, дата была бы указана как дд-мм-гггг.
РЕДАКТИРОВАТЬ: я забыл упомянуть, я пробовал решение, данное на этот вопрос, однако это форматирует дату как dd/MM/yy, однако я бы предпочел, чтобы она была как dd-MM-yyyy. Я могу изменить каждый / на - с помощью replaceAll("/","-")
, однако это не преобразует год из формата гг в формат гггг.