Код: Выделить всё
DateTimeFormatterЧтобы создать экземпляр DateTimeFormatter, следует использовать его статические методы/поля или использовать базовый класс DateTimeFormatterBuilder, как показано ниже:
Код: Выделить всё
DateTimeFormatter.ofPattern("yyyy-MM-dd")
// or
DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
// or
DateTimeFormatter.ISO_LOCAL_DATE_TIME
// or
new DateTimeFormatterBuilder().appendValue(ChronoField.YEAR).toFormatter()
Локализация
Теперь можно переопределить/изменить некоторые аспекты форматтера, вызвав методы .with***(), подобные сборщику, или аналогичные в экземпляре DateTimeFormatter, которые создают новый экземпляр копии с измененным аспектом:
Код: Выделить всё
DateTimeFormatter
.ofPattern("yyyy-MM-dd")
.withChronology(JapaneseChronology.INSTANCE) // New instance with this chronology
.withDecimalStyle(DecimalStyle.of(Locale.of("fa"))) // New instance with this decimal style
- При указании локали для средства форматирования (т. е. неявном использовании локали системы/Java)
- При установке локали Java по умолчанию с помощью Locale.setDefault(myLocale); и последующего создания экземпляра средства форматирования и его использования
- При использовании языкового стандарта в методе ofPattern("...", myLocale) DateTimeFormatter
- При использовании языкового стандарта в методе toFormatter(myLocale) метода DateTimeFormatterBuilder
- Даже при явном использовании расширений Юникода в нотации языкового стандарта (например, Locale.forLanguageTag("en-u-nu-arabext")) и использование полученного языкового стандарта в withLocale(myLocale)
- Любой DateTimeFormatter#withLocale следует заменить на DateTimeFormatter#localizedBy #910
- Как отформатировать дату по любому языковому стандарту, полученному из языкового тега со временем Java?
- (исправлено) Как отформатировать объект LocalDate в ММ/дд/гггг и формат сохраняется
- (исправлено) SimpleDateFormat и строка формата на основе локали
- и т. д.
Устаревшие классы Java DateFormat и SimpleDateFormat правильно локализуют цифры:
Код: Выделить всё
var myLocale = Locale.forLanguageTag("fa");
var formatter = new SimpleDateFormat("yyyy-MM-dd", myLocale);
var myDate = formatter.parse("2025-06-28");
formatter.format(myDate); // ۲۰۲۵-۰۶-۲۸
Код: Выделить всё
var myLocale = Locale.forLanguageTag("fa");
var formatter = com.ibm.icu.text.SimpleDateFormat("yyyy-MM-dd", myLocale);
var myDate = LocalDate.of(2025, 6, 28);
formatter.format(myDate); // ۱۴۰۴-۰۴-۰۷
Код: Выделить всё
let myDate = new Date(2025, 5, 28);
myDate.toLocaleDateString("fa"); // ۱۴۰۴/۴/۷
- Каковы именно различия между withLocale() и localizedBy()?
- Если localizedBy() дает более тщательно локализованный результат, есть ли разумный вариант использования вместо этого вызова withLocale()?
- Как локализовать числа с помощью DateTimeFormatter?
- Какой смысл в Locale в DateTimeFormatter?
- Для международных дат и времени следует использовать Unicode ICU, а не java.time.DateTimeFormatter
- Восточно-арабские цифры
- Удалить поставщика услуг локали (localespi)
Подробнее здесь: https://stackoverflow.com/questions/797 ... datetimefo
Мобильная версия