JSP에서 날짜와 시간을 다룰 때 서버의 기본 시간대가 아닌 특정 시간대를 적용해야 하는 경우가 자주 발생합니다. 이럴 때 유용하게 사용할 수 있는 것이 JSTL(JSP Standard Tag Library)의 <fmt:setTimeZone> 태그입니다. 이 태그는 지정한 시간대 객체를 스코프 변수(scope variable)에 저장하거나, 별도의 변수를 지정하지 않으면 해당 페이지 이후의 날짜 포맷 처리에 기본 시간대로 적용합니다.
fmt:setTimeZone 태그의 주요 속성
<fmt:setTimeZone> 태그는 아래와 같은 속성을 제공합니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| value | 스코프 변수 또는 설정(configuration) 변수로 노출할 시간대 값 | 필수 | 없음 |
| var | 새로운 시간대를 저장할 변수의 이름 | 선택 | 기본 시간대를 대체 |
| scope | 시간대를 저장할 변수의 유효 범위(scope) | 선택 | page |
사용 예제
다음 예제는 현재 시간대의 날짜·시간을 출력한 후, 시간대를 GMT-8로 변경하여 다시 출력하는 코드입니다.
<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c" %>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/fmt" prefix = "fmt" %>
<html>
<head>
<title>JSTL fmt:setTimeZone Tag</title>
</head>
<body>
<c:set var = "now" value = "<%=new java.util.Date()%>" />
<p>현재 시간대의 날짜: <fmt:formatDate value = "${now}" type = "both" timeStyle = "long" dateStyle = "long" /></p>
<p>시간대를 GMT-8로 변경</p>
<fmt:setTimeZone value = "GMT-8" />
<p>변경된 시간대의 날짜: <fmt:formatDate value = "${now}" type = "both" timeStyle = "long" dateStyle = "long" /></p>
</body>
</html>위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Date in Current Zone: 23 September 2010 15:21:37 GST Change Time Zone to GMT-8 Date in Changed Zone: 23 September 2010 03:21:37 GMT-08:00
예제 해설
먼저 <c:set> 태그로 현재 시각을 담은 now 변수를 생성하고, <fmt:formatDate> 태그로 현재 시간대 기준의 날짜와 시간을 출력합니다. 이후 <fmt:setTimeZone value = "GMT-8" />를 호출하면 이후 페이지 전체의 기본 시간대가 GMT-8로 변경되며, 같은 now 값을 다시 포맷하면 변경된 시간대 기준으로 시간이 표시됩니다. 만약 특정 영역에만 시간대를 적용하고 싶다면 var 속성으로 변수를 지정하고, 필요한 위치에서 <fmt:timeZone> 태그로 감싸 사용하면 됩니다.