Contents
see ListJSTL 현재날짜 기준 연산
JSTL(JSP Standard Tag Library)에서 현재 날짜를 기준으로 날짜 연산을 수행하는 방법입니다. 날짜 비교, 포맷팅, D-Day 계산 등에 활용됩니다.
언제 사용하나요?
- 이벤트 종료일까지 남은 일수 표시
- 새 게시물 표시 (24시간 이내)
- 마감일 경과 여부 확인
- 날짜별 조건부 렌더링
현재 날짜 가져오기
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- 현재 날짜 -->
<jsp:useBean id="now" class="java.util.Date" />
<!-- 포맷팅 출력 -->
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" />
날짜 비교
<!-- 밀리초로 변환하여 비교 -->
<jsp:useBean id="now" class="java.util.Date" />
<!-- 이벤트 종료일이 지났는지 확인 -->
<c:choose>
<c:when test="${event.endDate.time > now.time}">
<span class="ongoing">진행중</span>
</c:when>
<c:otherwise>
<span class="ended">종료됨</span>
</c:otherwise>
</c:choose>
<!-- 24시간 이내 게시물인지 확인 -->
<c:set var="oneDayMillis" value="${24 * 60 * 60 * 1000}" />
<c:if test="${now.time - post.regDate.time < oneDayMillis}">
<span class="new-badge">NEW</span>
</c:if>
D-Day 계산
<!-- 남은 일수 계산 -->
<jsp:useBean id="now" class="java.util.Date" />
<c:set var="oneDayMillis" value="${24 * 60 * 60 * 1000}" />
<c:set var="diffMillis" value="${event.endDate.time - now.time}" />
<c:set var="daysLeft" value="${diffMillis / oneDayMillis}" />
<c:choose>
<c:when test="${daysLeft > 0}">
D-<fmt:formatNumber value="${daysLeft}" maxFractionDigits="0" />
</c:when>
<c:when test="${daysLeft == 0}">
D-Day
</c:when>
<c:otherwise>
종료
</c:otherwise>
</c:choose>
날짜 파싱
<!-- 문자열을 Date로 변환 -->
<fmt:parseDate value="2024-12-31" pattern="yyyy-MM-dd" var="targetDate" />
<!-- 비교 -->
<c:if test="${now.time < targetDate.time}">
아직 2024년 12월 31일이 되지 않았습니다.
</c:if>
상대적 시간 표시
<!-- 몇 분/시간/일 전 표시 -->
<jsp:useBean id="now" class="java.util.Date" />
<c:set var="diff" value="${now.time - post.regDate.time}" />
<c:set var="diffMinutes" value="${diff / (60 * 1000)}" />
<c:set var="diffHours" value="${diff / (60 * 60 * 1000)}" />
<c:set var="diffDays" value="${diff / (24 * 60 * 60 * 1000)}" />
<c:choose>
<c:when test="${diffMinutes < 1}">
방금 전
</c:when>
<c:when test="${diffMinutes < 60}">
<fmt:formatNumber value="${diffMinutes}" maxFractionDigits="0" />분 전
</c:when>
<c:when test="${diffHours < 24}">
<fmt:formatNumber value="${diffHours}" maxFractionDigits="0" />시간 전
</c:when>
<c:when test="${diffDays < 7}">
<fmt:formatNumber value="${diffDays}" maxFractionDigits="0" />일 전
</c:when>
<c:otherwise>
<fmt:formatDate value="${post.regDate}" pattern="yyyy-MM-dd" />
</c:otherwise>
</c:choose>
월/년 비교
<!-- 이번 달 게시물인지 확인 -->
<fmt:formatDate value="${now}" pattern="yyyyMM" var="currentMonth" />
<fmt:formatDate value="${post.regDate}" pattern="yyyyMM" var="postMonth" />
<c:if test="${currentMonth eq postMonth}">
<span>이번 달 게시물</span>
</c:if>
<!-- 올해 게시물인지 확인 -->
<fmt:formatDate value="${now}" pattern="yyyy" var="currentYear" />
<fmt:formatDate value="${post.regDate}" pattern="yyyy" var="postYear" />
<c:choose>
<c:when test="${currentYear eq postYear}">
<fmt:formatDate value="${post.regDate}" pattern="MM/dd" />
</c:when>
<c:otherwise>
<fmt:formatDate value="${post.regDate}" pattern="yyyy/MM/dd" />
</c:otherwise>
</c:choose>
시간대 설정
<!-- 한국 시간대 설정 -->
<fmt:setTimeZone value="Asia/Seoul" />
<!-- 또는 -->
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm" timeZone="Asia/Seoul" />
주의사항
- 복잡한 날짜 연산은 서버(Java)에서 처리 권장
- JSTL 날짜 연산은 밀리초 기반
- 시간대 설정 주의
- EL에서 직접 Date 메서드 호출 제한됨