최종 정리
@Controller
Date today_date = new java.util.Date();
DateFormat dateFormat_year = new SimpleDateFormat("yy/MM/dd");
String today_str_year=dateFormat_year.format(today_date);
model.addAttribute("today_str_year", today_str_year);
JSP
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:formatDate pattern="yy/MM/dd" value="${getWritingList.date}" var="date_year" />
<fmt:formatDate pattern="hh:mm:ss" value="${getWritingList.date}" var="date_hour" />
<c:choose>
<c:when test="${date_year == today_str_year}">
<c:out value="${date_hour}" />
</c:when>
<c:otherwise>
<c:out value="${date_year}" />
</c:otherwise>
</c:choose>
게시판 글 작성 중 오늘 등록된 게시글이면 시,분,초가 보이고
일자가 다르면 년,월,일이 보이게 하려 했다.
DB에는 TimeStamp의 Curren_TimeStamp였나? 이걸로 자동 등록 시켜주고
JSP에서는
Date date = new java.util.Date();
로 현재 시간을 가져와서
서로 비교하려했다.
그런데 일단 TimeStamp와 Date는 형태가 달라서 변환이 필요해 보였다.
그래서
Date date = new java.util.Date();
long timestamp=date.getTime();
이렇게 date를 long타입으로 변환했더니.
Cannot convert [1,645,239,633,205] of type [class java.lang.Long] to [class java.util.Date]
변환할 수 없다고 에러가 떴다.
그래서 알아보니 아래와 같이
fmt:parseDate String형 -> Date형태 변경
fmt:formatDate : Date형 -> 날짜형태 변경
가 있었다.
그래서
long timestamp=date.getTime();
String today=String.valueOf(timestamp);
.jsp파일에 가서는
<fmt:formatDate pattern="yy/MM/dd" value="${getWritingList.date}" var="date_year" />
<fmt:formatDate pattern="hh:mm:ss" value="${getWritingList.date}" var="date_hour" />
<fmt:formatDate pattern="yy/MM/dd" value="${today_str}" var="today_year" />
<c:choose>
<c:when test="${date_year == today_year}">
<c:out value="${date_hour}" />
</c:when>
<c:otherwise>
<c:out value="${date_year}" />
</c:otherwise>
</c:choose>
라고 썻지만 에러가 떴다.
Unparseable date
해당 에러는 변환하려는 날짜 패턴이 입력되는 날짜 패턴과 달라서 발생하는 에러입니다.
0000-00-00 00:00:00.0 형식을 yyyyMMdd로 받아주려니까 안되는거다.
yyyy-MM-dd HH:mm:ss.s 라고 패턴을 바꿔주니까 잘된다.
하지만 난 yyyy-MM-dd 형태가 필요하다. 그래서 Str단계에서 필요한 정보만 substring으로 조작하여 추려보자.
하지만
Date today_date = new java.util.Date();
long today_long=today_date.getTime();
String today_str=String.valueOf(today_long);
System.out.println("today_date:"+today_date);
System.out.println("today_long:"+today_long);
System.out.println("today_str:"+today_str);
Timestamp writingDate= getWritingList.get(0).getDate();
long writingDate_long=writingDate.getTime();
String writingDate_str= String.valueOf(writingDate_long);
System.out.println("writingDate:"+writingDate);
System.out.println("writingDate_long:"+writingDate_long);
System.out.println("writingDate_str:"+writingDate_str);
today_date:Sat Feb 19 12:46:54 KST 2022
today_long:1645242414113
today_str:1645242414113
writingDate:2022-02-19 03:20:27.0
writingDate_long:1645208427000
writingDate_str:1645208427000
출력 값을 보니 date->long타입으로 변환때부터 문제가 있는거 같다.
그래서 Date->Str 변환법을 다시 알아보고
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date today_date = new java.util.Date();
String today_str=dateFormat.format(today_date);
System.out.println("today_date:"+today_date);
System.out.println("today_str:"+today_str);
Timestamp writingDate= getWritingList.get(0).getDate();
String writingDate_str= dateFormat.format(writingDate);
System.out.println("writingDate:"+writingDate);
System.out.println("writingDate_str:"+writingDate_str);
출력해보니
today_date:Sat Feb 19 12:51:56 KST 2022
today_str:19/02/2022 12:51:56
writingDate:2022-02-19 03:20:27.0
writingDate_str:19/02/2022 03:20:27
원하는 값대로 출력이 됐다.
그럼 이걸 이용해서 중간 정리하자면
Date today_date = new java.util.Date();
DateFormat dateFormat_year = new SimpleDateFormat("yy/MM/dd");
String today_str_year=dateFormat_year.format(today_date);
model.addAttribute("today_str_year", today_str_year);
@Controller에서
1. today_date로 오늘 날짜 받고
2. 출력 형태 지정
3. String형태로 출력
4. JSP에 전송
<fmt:formatDate pattern="yy/MM/dd" value="${getWritingList.date}" var="date_year" />
<fmt:formatDate pattern="hh:mm:ss" value="${getWritingList.date}" var="date_hour" />
<fmt:parseDate pattern="yy/MM/dd" value="${today_str_year}" var="today_str_year1" />
<fmt:formatDate pattern="yy/MM/dd" value="${today_str_year1}" var="today_year" />
<c:choose>
<c:when test="${date_year == today_year}">
<c:out value="${date_hour}" />
</c:when>
<c:otherwise>
<c:out value="${date_year}" />
</c:otherwise>
</c:choose>
JSP에서
1. 게시글 정보가 담긴 MySQL board테이블 DB 속 TimeStamp형태의 글 작성날짜를 yy/mm/dd 형태로 저장
2. 게시글 정보가 담긴 MySQL board테이블 DB 속 TimeStamp형태의 글 작성날짜를 hh:mm:ss 형태로 저장3. @Controller로 부터 받은 String 형태를 Date형태로 변경
(이때 패턴 형태가 동일하지 않으면 Unparseable date 에러가 뜬다)
4. Date형태를 String형태로 변경해준다.
[??그럼 방금 3번 4번은 할 필요가 없어 보여서 삭제를 해보니 잘 작동된다!]
5. 번 부턴 게시글 날짜가 오늘과 동일하면 시,분,초 만 출력 아니면 년,월,일만 출력하게끔 choose문 썼다.
출처: https://henerd.tistory.com/69 [코더의 흔적]
출처: https://chanchan-father.tistory.com/732 [찬찬이 아빠 블로그]
'Spring (boot) 오류 해결' 카테고리의 다른 글
$.ajax 값 가져오기 오류(다른 태크 input값 가져와짐) (0) | 2022.02.22 |
---|---|
스프링 URI 한글 깨짐 문제 (0) | 2022.02.20 |
JSTL if문 학습 (0) | 2022.02.18 |
[Spring] Request method 'GET' not supported 라는 에러, @PathVariable 기본값 설정하기 (0) | 2022.02.17 |
Error evaluating expression . Return value ) was not iterable. (0) | 2022.02.17 |
댓글