도찐개찐

[Thymeleaf] Date format 본문

JAVA/Thymeleaf

[Thymeleaf] Date format

도개진 2023. 1. 12. 08:58

웹어플리케이션 개발 중 날짜 형태 표기에 대한 부분이 개발 언어별로 다르기 때문에 가끔 헷갈릴때가 있습니다.

물론 자바 개발시에도 예외는 아니기도 하고 개발 방법에 따라서 TimeStamp, Date, String, LocalDateTime 등 다양한 방법으로 개발 하게 되는데요 본 포스팅에서는 각 타입의 데이터를 받아서 Thymeleaf로 formatting 를 하는 방법에 대해서 정리해 봤습니다.

 

타임리프를 사용하는데 타임리프가 존재 하지 않으면 안되겠죠?

 

1. 타임리프 종속성 추가

maven

<!-- pom.xml -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

gradle

// build.gradle
// thymeleaf
implementation group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.11.RELEASE'

2. java8time 종속성 추가

타임리프의 서식 지정 및 생성을 위한 Java 8 Date API 로 작업을 하기 위해 java8time 종속성을 추가해 줍니다.

<!-- pom.xml -->
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>
// build.gradle
// thymeleaf-extras-java8time
implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time', version: '3.0.4.RELEASE'

3. 기존 및 신규: java.util  java.time

Time 패키지 는 Java SE 플랫폼을 위한 새로운 날짜, 시간 및 달력 API입니다. 이 새 API와 이전 레거시 Date API 의 주요 차이점은 새  API가 타임라인의 기계 보기와 인간 보기를 구분한다는 것입니다. 기계 보기는 epoch 에 상대적인 일련의 정수 값을 표시하는 반면 사람 보기는 일련의 필드(예: 연도, 월, 일)를 표시합니다.

새로운 Time 패키지로 작업하려면 새로운 Java8TimeDialect 를 사용하도록 템플릿 엔진을 구성해야 합니다 .

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.addDialect(new Java8TimeDialect());
    engine.setTemplateResolver(templateResolver);
    return engine;
}

이렇게 하면 Standard Dialect에 있는 것과 유사한 # temporals 객체가 추가 되어 Thymeleaf 템플릿에서 Temporal 객체의 서식 지정 및 생성이 가능합니다.

 

새 클래스와 기존 클래스의 처리를 테스트하기 위해 다음 변수를 만들고 컨트롤러 클래스에 모델 개체로 추가합니다.

model.addAttribute("standardDate", new Date());
model.addAttribute("localDateTime", LocalDateTime.now());
model.addAttribute("localDate", LocalDate.now());
model.addAttribute("timestamp", Instant.now());

3.1. 형식 날짜

우리가 다루고자 하는 첫 번째 기능은 Date 객체의 형식화입니다(Spring 모델 매개변수에 추가됨). ISO8601 형식 을 사용 합니다.

<h1>Format ISO</h1>
<p th:text="${#dates.formatISO(standardDate)}"></p>
<p th:text="${#temporals.formatISO(localDateTime)}"></p>
<p th:text="${#temporals.formatISO(localDate)}"></p>
<p th:text="${#temporals.formatISO(timestamp)}"></p>

백엔드 측에서 우리의 날짜 를 어떻게 설정했는지에 관계없이 선택한 표준에 따라 Thymeleaf에 표시됩니다. standardDate  #dates 유틸리티 에 의해 처리됩니다 . 새로운 LocalDateTime , LocalDate  Instant 클래스는 # temporals 유틸리티 에 의해 처리됩니다 .

또한 형식을 수동으로 설정하려면 다음을 사용하여 설정할 수 있습니다.

 
<h1>Format manually</h1>
<p th:text="${#dates.format(standardDate, 'yyyy-MM-dd HH:mm:ss')}"></p>
<p th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></p>
<p th:text="${#temporals.format(localDate, 'yyyy-MM-dd HH:mm:ss')}"></p>

<!-- 
결과

2023-01-12 08:44:23
2023-01-12 08:44:23
2023-01-12 08:44:23
-->

 

728x90
Comments