[java] Java 날짜 형식-추가 문자 포함

Java에서 php date () 스타일 형식에 해당하는 것이 있습니까? 내 말은, PHP에서는 문자를 문자 그대로 처리하도록 백 슬래시 이스케이프 문자를 사용할 수 있습니다. 즉 yyyy \ y \ e \ a \ r2010 년이 됩니다. Java에서 비슷한 것을 찾지 못했습니다. 모든 예제는 기본 제공 날짜 형식 만 처리합니다.

특히 JCalendar 날짜 선택기와 해당 dateFormatString 속성을 다룹니다 .

내 로케일에서는 d와 같은 날짜 형식으로 모든 종류의 추가 항목을 작성해야하기 때문에 필요합니다. (일 동안) 일 후 부분, m. (몇 년 동안) 몇 년 후에 부분 등등. 최악의 경우 문자열 바꾸기 또는 정규식을 사용할 수 있지만 더 간단한 방법이 있습니까? 미리 감사드립니다!



답변

물론 SimpleDateFormat을 사용 하면 리터럴 문자열을 포함 할 수 있습니다.

날짜 및 시간 패턴 문자열 내에서 ‘A’에서 ‘Z’까지, ‘a’에서 ‘z’까지 인용되지 않은 문자는 날짜 또는 시간 문자열의 구성 요소를 나타내는 패턴 문자로 해석됩니다. 해석을 피하기 위해 작은 따옴표 ( ‘)를 사용하여 텍스트를 인용 할 수 있습니다. ” ””는 작은 따옴표를 나타냅니다. 다른 모든 문자는 해석되지 않습니다. 형식화 중에 출력 문자열에 복사되거나 구문 분석 중에 입력 문자열과 일치됩니다.

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


답변

완성도를 위해 Java 8은 다음 DateTimeFormatter을 지원합니다.

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


답변

java.util.Formatter에 설명 된대로 String.format을 사용할 수 있습니다 .

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


답변

java.time

Mark Jeronimus는 이미 그것을 말했습니다 . 나는 그것을 조금 더 살육하고 있습니다. 문자 그대로 작은 따옴표 안에 인쇄 할 텍스트를 넣으십시오.

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

오전 2시, 태평양 일광 절약 시간

위의 모든 포맷터는 구문 분석에도 사용할 수 있습니다. 예를 들면 :

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

16:43:56

SimpleDateFormat거의 10 년 전에이 질문을했을 때 사용 된 수업은 매우 번거롭고 오래되었습니다. 대신 최신 Java 날짜 및 시간 API 인 java.time을 사용하는 것이 좋습니다. 그것이 내가 그것을 증명하는 이유입니다.

연결


답변

java.text.SimpleDateFormat

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

여기에서 더 많은 정보를 얻을 수 있습니다. 링크 텍스트


답변