Есть ли эквивалент форматирования стиля php date () в Java? Я имею в виду, что в php я могу использовать символы обратной косой черты, чтобы трактовать их буквально. Т.е. yyyy \ y \ e \ a \ r станет 2010 годом . Ничего подобного в Java я не нашел, все примеры касаются только встроенных форматов даты.
В частности, я имею дело с инструментами выбора даты JCalendar и их свойством dateFormatString .
Мне это нужно, потому что в моем регионе требуется писать всевозможные дополнительные вещи в формате даты, например d. (за сутки) после суток часть, м. (на годы) после разлуки лет и так далее. В худшем случае я мог бы использовать замену строки или регулярное выражение, но, может быть, есть более простой способ? Заранее спасибо!
java
date-format
Сеянус
источник
источник
SimpleDateFormat
класс, использованный в нескольких ответах, заведомо проблематичен и давно устарел. Избегай это. Вместо этого используйте короткий ответ Марка Джеронимуса, демонстрирующий использование java.time, современного API даты и времени Java .Ответы:
Конечно, с SimpleDateFormat вы можете включать буквальные строки:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
источник
46''
. Первый спасается вторым.java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
, теперь унаследованы , вытеснены классами java.time, встроенными в Java 8 и более поздних версий .Для полноты картины Java 8
DateTimeFormatter
также поддерживает это:DateTimeFormatter.ofPattern("yyyy 'year'");
источник
Вы можете использовать String.format, как описано в java.util.Formatter :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
источник
java.time
Марк Иероним уже сказал это . Я немного уточняю это. Просто поместите текст для печати буквально в одинарные кавычки.
DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'"); System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter)); System.out.println(Year.of(2010).format(yearFormatter)); System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));
Вывод при запуске только что:
Если вы используете a
DateTimeFormatterBuilder
и егоappendPattern
метод, используйте одинарные кавычки таким же образом. Или используйте егоappendLiteral
метод и без одинарных кавычек.Как же нам поместить в формат одинарную кавычку? Две одинарные кавычки дают одну. Не имеет значения, находится ли двойная одинарная кавычка внутри одинарных кавычек или нет:
DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\""); System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));
DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH); System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles")) .format(formatterWithSingleQuoteInsideSingleQuotes));
Все вышеперечисленные средства форматирования также можно использовать для синтаксического анализа. Например:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
SimpleDateFormat
Класс , используемый , когда этот вопрос был задан почти 10 лет назад , как известно , хлопотное и долгое время устарели. Я рекомендую вместо этого использовать java.time, современный API даты и времени Java. Вот почему я демонстрирую именно это.Ссылки
DateTimeFormatter
источник
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Вы получите больше информации здесь текст ссылки
источник