팀프로젝트/SpringBoot

스프링부트 팀플) 20240320_날짜 형식 변경

일일일코_장민기 2024. 3. 20. 16:24
728x90

https://readystory.tistory.com/55

 

[JAVA] Date to String / String to Date 변환(SimpleDateFormat)

프로그래밍을 하다 보면 시간이나 날짜를 사용할 일이 많은데, 아마 대부분 Date 클래스를 사용했을 겁니다. 예를 들어 현재 시간을 가져오는 코드는 다음과 같습니다. import java.util.Date; public class

readystory.tistory.com

https://enterkey.tistory.com/391

 

JSTL 에서 MAP 접근, 출력 (KEY로 바로 값 추출)

검색어 : how to map value by key jstl 문법이고 뭐고 이럴땐 대략... 대신 중요단어를 적당히 넣어 물어보면 된다. ( 검색 결과중 참고 URL : http://stackoverflow.com/questions/924451/jstl-access-a-map-value-by-key ) 서핑

enterkey.tistory.com

 

 

 

 

오늘 하루종일 쉽지 않다
어제 열심히 고민했던 application context는 적용이 되질 않았고...
닉네임에 적용하려 했던 부트스트랩 팝오버도 적용되질 않았다...
내 시간...

심지어 날짜 형식 변경조차 제대로 굴러가질 않다가 겨우 해결했다.

 

당일 글은 시분초, 그 전 글들은 연월일로 표시되도록 만들었다.
당일 글
전날 글

 

우선 DATE타입이었던 POSTDATE와 EDITTEDDATE를 String타입으로 바꾸었다.

DB변경...DATE -> String

 

 

컨트롤러

//게시판 글 목록 보기

@GetMapping("/viewDBoardList/{orderBy}")

public ModelAndView viewDBoardList(@PathVariable("orderBy") String orderBy, HttpServletRequest request) throws ParseException {

 

//게시판으로 바로 들어왔을 경우, 사용자 식별을 위한 값 저장

ServletContext application = request.getServletContext();

String key = (String) application.getAttribute("save");

if(key == null) {

key = getNum();

application.setAttribute("save", key);

}

 

List<DebugBoardDTO> list = serv.viewDBoardList(orderBy);

for (DebugBoardDTO debugBoardDTO : list) {

debugBoardDTO.setEdittedDate(chooseDateForm(debugBoardDTO.getEdittedDate()));

}

 

 

ModelAndView mav = new ModelAndView();

mav.addObject("list", list);

mav.setViewName("member/Test/viewDBoardList");

return mav;

}

 

//게시판 글 등록(PRG 패턴을 통해 중복 등록 방지)

@PostMapping("/viewDBoardList/insertPost")

public ModelAndView insertPost(DebugBoardDTO dto) {

System.out.println(dto);

 

// 현재 날짜와 시간을 dto에 입력

Date nowDate = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String now = format.format(nowDate);

dto.setPostDate(now);

 

serv.insertPost(dto);

List<DebugBoardDTO> list = serv.viewDBoardList("boardNum");

ModelAndView mav = new ModelAndView();

mav.addObject("list", list);

mav.setViewName("redirect:/viewDBoardList/boardNum");

return mav;

}

 

//게시판 글 보기

@GetMapping("/viewDBoardContent/{bNum}")

public ModelAndView viewDBoardContent(@PathVariable("bNum") int boardNum, HttpServletRequest request) throws ParseException {

 

//게시판 글로 바로 들어왔을 경우, 사용자 식별을 위한 값 저장

ServletContext application = request.getServletContext();

String key = (String) application.getAttribute("save");

if(key == null) {

key = getNum();

application.setAttribute("save", key);

}

ModelAndView mav = new ModelAndView();

 

//이전글 | 다음글 가져오기

DebugBoardDTO prev = prevPost(boardNum);

if(prev != null) { //마지막 글은 prev가 null값

prev.setEdittedDate(chooseDateForm(prev.getEdittedDate()));

}

DebugBoardDTO next = nextPost(boardNum);

if(next != null) { //가장 최신 글은 next가 null값

next.setEdittedDate(chooseDateForm(next.getEdittedDate()));

}

 

DebugBoardDTO dto = serv.viewDBoardContent(boardNum);

String date = chooseDateForm(dto.getEdittedDate());

 

mav.addObject("date", date);

mav.addObject("dto", dto);

mav.addObject("prev", prev);

mav.addObject("next", next);

mav.setViewName("member/Test/viewDBoardContent");

return mav;

}

 

//게시판 글 수정하기

@PostMapping("/checkUpdatePost/updateDBoard")

public String updateDBoard(DebugBoardDTO dto) {

 

// 현재 날짜와 시간을 dto에 입력

Date nowDate = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String now = format.format(nowDate);

dto.setEdittedDate(now);

 

serv.updateDBoard(dto);

return "redirect:/viewDBoardContent/"+dto.getBoardNum();

}

 

//글을 게시한 날짜와 오늘 날짜를 비교하는 함수

public String chooseDateForm(String date) throws ParseException {

 

Date today = new Date(); //현재 시간

 

String str = date;

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date edittedDate = format.parse(str); //등록, 수정된 날짜

 

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy년 MM월 dd일"); //연월일 Format

SimpleDateFormat timeFormat = new SimpleDateFormat("HH시 mm분 ss초"); //시분초 Format

 

String todayForm = dateFormat.format(new Date()); //현재 시간의 연월일

String edittedDateForm = dateFormat.format(edittedDate); //등록, 수정된 날짜의 연월일

String edittedDateTime = timeFormat.format(edittedDate); //등록, 수정된 날짜의 시분초

 

if(todayForm.equals(edittedDateForm)) { //오늘이 글을 쓴 날짜일 경우

return edittedDateTime; //jsp에 시분초 전송

} else {

return edittedDateForm; //jsp에 연월일 전송

}

}

 

 

참 우여곡절이 많았다.
처음에는 DATE상태로 만들었을 때, 세부 글 확인 페이지 작업을 수월했다.
데이터를 변환하고 날짜 데이터를 따로 출력하면 되니까...
그런데 게시판 글 리스트를 출력하려고 보니까 dto에 맞지 않는 타입이라 코드가 복잡해질 수 밖에 없었다.

예를 들면, 게시판 번호와 변환된 날짜를 Map에 넣고 JSP로 보낸 다음
게시판 번호에 맞는 리스트 안에 따로 집어넣는다던지...

날짜 데이터를 hidden으로 받은 다음에 ajax함수를 통해 형식을 바꾼다던지...

하지만 그런 고집을 피울 바에는 DB를 String타입으로 고르치는게 수월하지 않을까 하는 생각이 들었고
결국 3시간 동안 낑낑대던 작업을 30분 만에 끝냈다. 물론 형식 전환 함수를 만드는 시간이 빠지긴 했지만...

아 이제 익명의 조회수와 추천을 쿠키로 처리할 차례인데...