※ JSTL 시간,날짜계산 (parseDate / pareNumber)
- 서버에서 받은 데이터를 JSP페이지에서 날짜나,시간 계산하여 화면에 노출해야할 경우가 많은데 이 때 JTSL에서 제공하는 Formatting Tags(fmt) 를 사용하면 대부분 처리가 가능합니다. ( Javascript 를 사용해도 되지만.. 서버단에서 안전하게 처리하고 싶은 경우)
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
1 | <fmt:formatNumber> To render numerical value with specific precision or format. |
2 | <fmt:parseNumber> Parses the string representation of a number, currency, or percentage. |
3 | <fmt:formatDate> Formats a date and/or time using the supplied styles and pattern. |
4 | <fmt:parseDate> Parses the string representation of a date and/or time |
- 계산할 데이터 형태가 가공되지 않은 문자열 형태일 경우 많으므로 계산을 위해 DATE형으로 변환 시켜 줍니다.
- <fmt:parseDate>태그를 이용하여 문자열로 이루어진 여러가지 포맷의 데이터를 DATE형으로 변환 시킬 수 있습니다.
startDate = 2017-07-27 endDate = 2017-07-30 <fmt:parseDate var="startDate_D" value="${startDate }" pattern="yyyy-MM-dd"/> <fmt:parseDate var="endDate_D" value="${endDate }" pattern="yyyy-MM-dd"/> startTime = 0215 endTime = 0100 <fmt:parseDate var="startTime_D" value="${startTime }" pattern="HHmm"/> <fmt:parseDate var="endTime_D" value="${endTime }" pattern="HHmm"/> | cs |
<fmt:parseNumber var="startTime_N" value="${startTime_D.time}" integerOnly="true" /> 8100000 <fmt:parseNumber var="endTime_N" value="${endTime_D.time}" integerOnly="true"/> 3600000 | cs |
Step4. 숫자로 변환된 두 데이터를 연산후 <fmt:formatNumber> 등을 이용하여 원하는 포맷과 단위로 화면에 출력
- 원하는 포맷으로 출력
+ 예제
1. 두 날짜의 차이 startDate = 2017-07-27 endDate = 2017-07-30 <fmt:parseDate var="startDate_D" value="${startDate }" pattern="yyyy-MM-dd"/> <fmt:parseDate var="endDate_D" value="${endDate }" pattern="yyyy-MM-dd"/> <fmt:parseNumber var="startDate_N" value="${strPlanDate.time / (1000*60*60*24)}" integerOnly="true" /> <fmt:parseNumber var="endDate_N" value="${endPlanDate.time / (1000*60*60*24)}" integerOnly="true" /> ${startDate_N - endDate_N} >> 3 ----------------------------------------------------------------------------------------------- 2. hhmm포맷의 두 시간의 합 (결과 hhmm으로 표기) Time1 = 0215 Time2 = 0100 <fmt:parseDate var="Time1_D" value="${Time1}" pattern="HHmm"/> <fmt:parseDate var="Time2_D" value="${Time2}" pattern="HHmm"/> >> DATE타입으로 변환 <fmt:parseNumber var="sum_hh" value="${(Time1_D + Time2_D / (1000*60)) / 60 }" integerOnly="true" /> 3 <fmt:parseNumber var="sum_mm" value="${(Time1_D + Time2_D / (1000*60)) % 60 }" integerOnly="true" /> 15 >> 분단위로 변환(195+60) 하여 계산후 60으로 나눈 몫과 나머지로 hh 와 mm을 각각 구함 <fmt:formatNumber var="format_hh" value="${sum_hh}" minIntegerDigits="2" /> 03 <fmt:formatNumber var="format_mm" value="${sum_mm}" minIntegerDigits="2" /> 15 >> hhmm 포맷으로 출력하기 위해 formatNumber 태그 사용 ${format_hh}${format_mm} >> 0315 | cs |
Reference
https://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm
궁금한 점이나 오타, 수정, 요청 사항은 댓글로 남겨주세요. (로그인 없이 가능)
'Program > JSP, JSTL' 카테고리의 다른 글
[JSTL] JSTL, JSP 파라미터 받기 ( param.name / request.getparameter) (1) | 2017.08.22 |
---|