Egloos 728x90

구글 애널리틱스


2010/09/15 17:27

[ JSP ][ JSTL ] fmt:parseDate ▷ Java 복습




  날짜 관련 값을 출력할 때, 그 형태를 바꿔주어야 하는 경우가 꽤 있습니다.

  그냥 Java 클래스 내에서 변경하는 경우라면 SimpleDateFormat 클래스를 이용하는 게 가장 쉽고 빠른 방법일 것입니다만, 여의치 않게 JSP 페이지 내에서 변경해야 하는 경우가 있습니다. 게다가 날짜의 자료형이 그나마 Date 타입이라면 처리하기 쉽지만, 이미 String 형태로 변환되어서 온 경우라면 또 골치가 아파지죠.

  물론 그냥 스크립트릿으로 처리해버리는 방법도 있겠습니다만, 이왕 JSTL을 쓰는 김에 JSTL 내에서만 해결하는 방법을 찾아봤습니다.

  우선 String 형일 때 Date 형으로 변환해주는 <fmt:parseDate>를 사용해야 합니다. 이 태그는 원래 다른 나라간 일시의 변환이 주목적인 것 같습니다만, 일단 여기서는 String형을 Date형으로 변환하는 데 이용하겠습니다.
  ※ 로컬화 fmt 라이브러리 설명 링크 → JSTL 기초, Part 3: 보여지는 것도 중요하다! (한글)


  <fmt:parseDate var="dateTempParse" value="${dateTemp}"/>


  기본적인 사용법은 이 정도입니다만, 저대로 사용하면 대부분의 경우


javax.servlet.jsp.JspException: In <parseDate>, value attribute can not be parsed: "2010-09-14 16:51:44.0" at org.apache.taglibs.standard.tag.common.fmt.ParseDateSupport.doEndTag(ParseDateSupport.java:180)
...(생략)...


  이런 식의 오류를 보게 되겠죠. 위 예외문에서 붉은 색으로 표시한 위치에 오는 문자열은 대부분 다 다를 것입니다. 하여튼 요지는 저런 식의 문자열은 parseDate가 인식할 수 없는 형태라는 것입니다.

  이 경우 pattern 속성을 추가해 주어야 합니다.


       <fmt:parseDate var="dateTempParse" value="${dateTemp}" pattern="yyyy-MM-dd HH:mm:ss.S"/>


  단, pattern 값은 오류 메시지를 보고, 위 붉은 색으로 표시한 부분에 나오는 형태에 맞춰서 입력해야 합니다. 이런 식으로 입력된 pattern에 맞춰서 parseDate는 String값을 읽어들여서 성공적으로 Date객체로의 변환을 마치게 됩니다.

  ※ 예외 해결법 링크(일본어) → <fmt:parseDate> (일본어로 나와있긴 하지만, 맨 아래에 사용예 코드만 보면 알 수 있습니다.)

  Date객체로의 변환이 끝났으면 <fmt:formatDat>를 이용해 적절한 형식으로 변환하여 출력하면 됩니다.


       <fmt:parseDate var="dateTempParse" value="${dateTemp}" pattern="yyyy-MM-dd HH:mm:ss.S"/>
       <fmt:formatDate value="${dateTempParse}" pattern="yyyy/MM/dd HH:mm"/>


덧글

  • imovator 2012/05/29 20:14 # 삭제 답글

    덕분에 해결했습니다. 한참을 찾다가 이렇게 쏙쏙 이해가는 포스트를 찾았네요.
    정말 감사합니다^^
  • 별소리 2012/05/31 20:23 #

    도움이 되셨다니 다행입니다 :)
  • 소담아빠 2017/07/03 11:12 # 삭제 답글

    정말 큰 도움이 되었습니다. 감사합니다.
댓글 입력 영역

애드센스336x280

알라딘TTB-Egloos(하단-일반)



이 이글루를 링크한 사람 (블랙)

36