[JSP] JSTL (fmt)로 날짜 포맷에 맞게 출력하는 방법
in JSP
JSTL fmt
Date형과 String형인 경우 jstl(fmt)로 날짜 포맷에 맞게 출력하는 방법
fmt:parseDate : String 형을 받아서 워하는 포멧으로 자료형을 Date 형태로 변경 시켜 준다.
fmt:formatDate : Date 형을 받아서 원하는 포멧으로 날짜 형태를 변경시켜 준다.
상단에 fmt를 선언
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
만약 EL 태그인 registered의 값이 date형태라면 formatDate만 사용하여 pattern값에 원하는 형태로 날짜를 지정하면 된다.
<fmt:formatDate value="${registered}" pattern="yyyy-MM-dd" />
하지만 EL 태그인 registered의 값이 String 형태라면 먼저 parseDate를 통해 date형태로 값을 파싱하고 그 후에 formatDate를 사용하면 된다.
<fmt:parseDate value="${order.registered}" var="registered" pattern="yyyy.MM.dd HH:mm" /> <fmt:formatDate value="${registered}" pattern="yyyy-MM-dd" />
Error : java.text.ParseException: Unparseable date: “03-12 17:22:19”
DB에는 2021-03-12 17:22:19 이런식으로 값이 들어가있어서
2021-03-12 이런식으로 바꾸려고 하는데 자꾸 에러가났다.
기존에는
아래처럼 수정헀는데로 안됨… DB에는 DATE형식으로 들어가있다.
파싱할때 패턴을 맞춰주면 해결!
StatsController.java
@RequestMapping(value = "/order/getList", method ={RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public Map<String, Object> getOrder(ModelMap model,@ModelAttribute OrderSearchCondition condition , HttpSession session) throws Exception {
Map<String, Object> result = Maps.newHashMap();
String customer = condition.getCustomer();
if (StringUtils.isNotEmpty(customer)) {
String userid = userMapper.getIdByName(customer);
condition.setUserid(userid);
}
if (userService.isCompanyStaff(getUserId())) {
condition.setUserid(getUserId());
}
boolean isSuccess = service.getOrderStats(result, condition);
model.addAttribute("resultList", service.getOrderStatsForPrint(condition));
return getFormattedResult(true, result);
}
StatsService.java
public List<Order> getOrderStatsForPrint(OrderSearchCondition condition) throws Exception {
List<Order> resultList = statsDao.getOrderStats(condition);
restructOrderStats(resultList);
return resultList;
}
private void restructOrderStats(List<Order> resultList) throws Exception {
int size = resultList.size();
Order order = null;
for (int i = 0; i < size; i++) {
order = resultList.get(i);
orderService.setCustomerAndWorker(order);
orderService.setTitle(order);
orderService.setDateFormat(order);
orderService.setStatusName(order);
orderService.setMobileById(order);
System.out.println(resultList.get(i));
}
}
OrderService.java
public void setDateFormat(Order order) throws Exception {
if (order == null) {
return;
}
String registered = DateUtils.processDate(order.getRegistered());
order.setRegistered(registered);
}
DateUtils.java
public static String processDate(String dateStr) throws ParseException {
if (StringUtils.isEmpty(dateStr)) {
return dateStr;
}
Date date = stringToDate(dateStr);
Calendar cal = Calendar.getInstance();
int nowYear = cal.get(Calendar.YEAR);
String nowYearStr = "" + nowYear;
String tempYear = dateStr.substring(0,4);
if(tempYear.equals(nowYearStr)){
return yyyyMMddhhmm.format(date); // Mmddhhmm
}
if (date == null) {
return "";
}
long elapsedTime = System.currentTimeMillis() - date.getTime();
if (elapsedTime < 60 * 60 * 1000) { // 1시간 이내
return Long.toString(elapsedTime / 1000 / 60) + "분전";
} else {
if(dateStr.equals(nowYearStr)){
return yyyyMMddhhmm.format(date);// Mmddhhmm
} else {
return yyyyMMddhhmm.format(date);
}
}
}
<c:forEach items="${resultList}" var="order" varStatus="status">
<tr>
<td>${order.seq}</td>
<fmt:parseDate value="${order.registered}" var="registered" pattern="yyyy.MM.dd HH:mm" />
<td><fmt:formatDate value="${order.registered}" pattern="yyyy-MM-dd" /></td>
<td>${order.usercode}</td>
<td>${order.outlet_detail}</td>
<td>${order.item_code}</td>
<td>${order.title}</td>
<td>${order.purchaseprice}</td>
<td>${order.unitprice}</td>
<td>${order.count}</td>
<td>${order.purchase_price}</td>
<td>${order.price}</td>
<c:choose>
<c:when test="${order.designprice ne null}">
<td>${order.designprice}</td>
</c:when>
<c:otherwise>
<td>0</td>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${order.designprice ne null}">
<td>=${order.price}+${order.designprice}</td>
</c:when>
<c:otherwise>
<td>${order.price}</td>
</c:otherwise>
</c:choose>
<td>${order.username}</td>
<td>${order.usercode}</td>
<td>${order.mobile}</td>
<td>${order.sender_name}</td>
<td>${order.sender_postcode}</td>
<td>${order.sender_address} ${order.sender_detailaddress}</td>
<td>${order.sender_phone}</td>
<td>${order.fromDate}</td>
<td>${order.description}</td>
</tr>
</c:forEach>