Подтвердить что ты не робот

Формат даты в формате Java - включая дополнительные символы

Есть ли эквивалент форматирования стиля php date() в Java? Я имею в виду, что в php я могу использовать символы обратного слэша, чтобы они обрабатывались буквально. То есть yyyy\y\e\a\r станет 2010 год. Я не нашел ничего подобного на Java, все примеры имеют дело только со встроенными форматами дат.

В частности, я рассматриваю JCalendar сборщиков дат и их свойство dateFormatString.

Мне это нужно, потому что в моей локали требуется писать всевозможные дополнительные данные в формате даты, например, d. (за день) после дня части, м. (в течение многих лет) после нескольких лет и так далее. В худшем случае я мог бы использовать строку replace или regexp, но, может быть, есть более простой способ? Спасибо заранее!

4b9b3361

Ответ 1

Конечно, с SimpleDateFormat вы можете включить литералы:

В строках паттернов даты и времени неквалифицированные буквы от 'A' до 'Z' и от 'a' до 'z' интерпретируются как буквы шаблонов, представляющие компоненты даты или строки времени. Текст можно указывать с использованием одинарных кавычек ('), чтобы избежать интерпретации. "" представляет одну цитату. Все остальные символы не интерпретируются; они просто копируются в строку вывода во время форматирования или сопоставляются с входной строкой во время разбора.

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time

Ответ 2

Просто для полноты, Java 8 DateTimeFormatter также поддерживает это:

DateTimeFormatter.ofPattern("yyyy 'year'");

Ответ 3

Вы можете использовать String.format, как описано в java.util.Formatter:

Calendar c = ...;
String s = String.format("%tY year", c);
// -> s == "2010 year" or whatever the year actually is

Ответ 4

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));

Вывод при запуске только сейчас:

2010 year
2010 year
2019 year

Если вы используете DateTimeFormatterBuilder и его метод appendPattern, используйте одинарные кавычки таким же образом. Или используйте вместо него метод appendLiteral, без одинарных кавычек.

Как мы помещаем одну цитату в формате, тогда? Две одинарные кавычки дают одну. Не имеет значения, находится ли двойная одинарная кавычка внутри одинарных кавычек или нет:

    DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\"");
    System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));

10 28' 34"

    DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes
            = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH);
    System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles"))
            .format(formatterWithSingleQuoteInsideSingleQuotes));

02:00 по тихоокеанскому летнему времени

Все приведенные выше средства форматирования также могут быть использованы для анализа. Например:

    LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
    System.out.println(time);

16:43:56

Класс SimpleDateFormat, используемый, когда этот вопрос был задан почти 10 лет назад, печально известен своими хлопотами и давно устарел. Я рекомендую вместо этого использовать java.time, современный Java-интерфейс даты и времени. Вот почему я демонстрирую именно это.

Ссылки

Ответ 5

java.text.SimpleDateFormat

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
String formattedDate = formatter.format(date);

Вы получите дополнительную информацию здесь текст ссылки