Формат дати Java - включаючи додаткові символи


88

Чи існує еквівалент форматування стилю php date () у Java? Я маю на увазі, що в php я можу робити символи, що вводять у зворотну риску, щоб їх розглядати буквально. Тобто рррр \ у \ е \ а \ р стане 2010 роком . Я не знайшов нічого подібного в Java, усі приклади стосуються лише вбудованих форматів дат.

Зокрема, я маю справу з засобами вибору дати JCalendar та їх властивістю dateFormatString .

Мені це потрібно, оскільки в моїй мові потрібно писати всілякі додаткові матеріали у форматі дати, наприклад d. (на добу) після доби частина, м. (на роки) через роки частина і так далі. У гіршому випадку я міг би використати заміну рядка або регулярний вираз, але, можливо, існує простіший спосіб? Спасибі заздалегідь!


1
Для кожного, хто читає це у 2019 році чи пізніше, SimpleDateFormatклас, використаний у парі відповідей, як відомо, клопіткий і давно застарілий. Уникайте цього. Натомість використовуйте коротку відповідь Марка Єронімуса, що демонструє використання java.time, сучасного API дати та часу Java .
Оле В. В.

Відповіді:


164

Звичайно, за допомогою SimpleDateFormat ви можете включати буквальні рядки:

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

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

Супер, це саме те, що мені потрібно. На диво, я не знайшов такої простої речі в жодному з численних прикладів, які я переглядав в Інтернеті :) Велике спасибі!
Sejanus

1
Як уникнути лапки Я намагаюся зробити щось із форматом mm '. Позначаючи, наприклад, 46 хвилин, як 46 '.
Сотті

3
@Sotti: 46''. Перший врятувався другим.
Тіло

1
FYI, страшенно неприємні класи часу та часу, такі як java.util.Date, java.util.Calendarі java.text.SimpleDateFormatтепер є застарілими , витіснені класами java.time, вбудованими в Java 8 та пізніші версії.
Василь



5

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

Якщо ви використовуєте a 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, сучасний API дати та часу Java. Ось чому я демонструю саме це.

Посилання


-4

java.text.SimpleDateFormat

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

Ви отримаєте більше інформації тут, текст посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.