[JSP] JSTL (fmt)로 날짜 포맷에 맞게 출력하는 방법


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>





© 2021. by Hojin Ahn

Powered by 🐯