Czy istnieje odpowiednik formatowania stylu php date () w Javie? Chodzi mi o to, że w php mogę znaki ucieczki odwrotnym ukośnikiem, aby były traktowane dosłownie. To znaczy rrrr \ y \ e \ a \ r będzie rokiem 2010 . Nie znalazłem czegoś podobnego w Javie, wszystkie przykłady dotyczą tylko wbudowanych formatów daty.
W szczególności mam do czynienia z selektorami dat JCalendar i ich właściwością dateFormatString .
Potrzebuję tego, ponieważ w moich ustawieniach regionalnych wymagane jest pisanie różnego rodzaju dodatkowych rzeczy w formacie daty, takich jak d. (na dzień) część dniowa, m. (przez lata) po latach i tak dalej. W najgorszym przypadku mógłbym użyć zamiany napisów lub wyrażenia regularnego, ale może jest prostszy sposób? Z góry dziękuję!
źródło
SimpleDateFormat
klasa użyta w kilku odpowiedziach jest notorycznie kłopotliwa i od dawna nieaktualna. Unikaj tego. Zamiast tego skorzystaj z krótkiej odpowiedzi Marka Jeronimusa, demonstrującej użycie java.time, nowoczesnego API daty i czasu Java .Odpowiedzi:
Jasne, dzięki SimpleDateFormat możesz dołączyć ciągi literałów:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
źródło
46''
. Pierwszy, który uciekł przed drugim.java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i nowsze.Dla kompletności Java 8
DateTimeFormatter
obsługuje również to:DateTimeFormatter.ofPattern("yyyy 'year'");
źródło
Możesz użyć String.format zgodnie z dokumentacją w java.util.Formatter :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
źródło
java.time
Mark Jeronimus już to powiedział . Rozwijam to trochę bardziej. Po prostu umieść tekst do wydrukowania dosłownie w pojedynczych cudzysłowach.
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));
Wyjście podczas pracy przed chwilą:
Jeśli używasz a
DateTimeFormatterBuilder
i jejappendPattern
metody, użyj apostrofów w ten sam sposób. Lub użyjappendLiteral
zamiast tego jego metody i bez cudzysłowów.Jak więc umieścimy pojedynczy cytat w formacie? Dwa pojedyncze cudzysłowy dają jeden. Nie ma znaczenia, czy podwójny pojedynczy cudzysłów znajduje się w pojedynczych cudzysłowach, czy nie:
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));
Wszystkie powyższe elementy formatujące mogą być również używane do analizowania. Na przykład:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
SimpleDateFormat
Klasa używana gdy pytano prawie 10 lat temu, jest notorycznie kłopotliwe i długo nieaktualne. Zalecam zamiast tego używać java.time, nowoczesnego API daty i czasu w Javie. Dlatego właśnie to pokazuję.Spinki do mankietów
DateTimeFormatter
źródło
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Więcej informacji uzyskasz tutaj tekst linku
źródło