본문 바로가기

Backend/JAVA

[Java] 시간 비교, 시간 파싱

반응형

event기간에 따라 문구를 변경하고 싶다는 요청사항이 들어왔다.

1. event 종료 전이지만 closed상태에서의 문구

2. event 종료 후 closed상태에서의 문구

이렇게 두 가지로 케이스를 분리해달라고 했다.

 

그래서 그냥 현재시간을 model에 담아서 client단에서 비교하게 구현하려고 했다.

// java
...
Date timestamp = new Date(System.currentTimeMillis());
model.addAttribute("timestamp", timestamp);
...

// js
...
console.log("${timestamp}");
console.log("${EvnetEndDate}");
<c:choose>
	<c:when test="${ EvnetEndDate > timestamp}">
		popup_text("<spring:message code="${CODE}.eventDateException.msg" />");
	</c:when>
	<c:otherwise>
		popup_text("<spring:message code="${CODE}.eventDateExpired.msg" />");
	</c:otherwise>
</c:choose>
...

 

응 어림없지

 

하지만 format이 달라 비교를 할 수 없다.

찾아보니 .before()를 이용해 Controller단에서 비교 가능하다고 한다.

// timestamp를 Date 객체로 변환
Date currentDate = new Date(System.currentTimeMillis());

// eventEndDate가 Date 객체라고 가정하고, 비교하기
// eventEndDate를 Date 객체로 가정하면, 아래와 같이 비교 가능
if (currentDate.before(eventEndDate)) {
    // 현재 날짜가 eventEndDate보다 이전일 때의 처리
}

// 또는 eventEndDate가 문자열인 경우, 문자열을 Date 객체로 파싱한 후 비교
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 날짜 형식은 eventEndDate에 맞춰서 설정
Date eventEndDateParsed = sdf.parse(eventEndDate);
if (currentDate.before(eventEndDateParsed)) {
    // 현재 날짜가 eventEndDate보다 이전일 때의 처리
}

 

하지만 원래 하려던 방향대로 Client에서 비교 가능하게 하려면 먼저 eventEndDate와 format을 맞춰주어야 했다.

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // 현재 시간을 밀리초 단위로 가져옴
        long currentTimeMillis = System.currentTimeMillis();
        
        // 밀리초 값을 Date 객체로 변환
        Date currentDate = new Date(currentTimeMillis);
        
        // 원하는 날짜 형식 설정
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        // Date 객체를 설정된 형식의 문자열로 변환
        String formattedDate = sdf.format(currentDate);
        
        System.out.println("Current date and time in format yyyy-MM-dd HH:mm:ss: " + formattedDate);
    }
}

 

 

+ ) Java의 SimpleDateFormat에서는 표현식

yyyy : 연도

MM : 월

dd : 일

E : 요일

HH : 시간(24시간) ( cf. hh는 12시간 )

mm : 분

ss : 초

 

요일의 표시하는 E 문자 역시 포맷 문자열에 몇 개의  사용하는지에 따라 형태(예: 축약형, 전체 이름)가  달라짐

 

Date currentTime = new Date(System.currentTimeMillis());
String timeStamp = "";
if (locale.getLanguage().equals("ko")) {
	SimpleDateFormat simpleDateFormat
    	= new SimpleDateFormat("yyyy년 MM월 dd일 (E) HH:mm", new Locale("ko", "KR"));
	timeStamp = simpleDateFormat.format(currentTime);
} else {
	SimpleDateFormat simpleDateFormat
    	= new SimpleDateFormat("HH:mm, EEEE, MMMM dd'th' yyyy", Locale.ENGLISH);
	timeStamp = simpleDateFormat.format(currentTime);
}

 

++ ) date형식의 비교

Date currentTime = new Date(System.currentTimeMillis());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date chkDate = simpleDateFormat.parse([String 타입 데이터]);

if(date.before(currentTime)){
	// date가 currentTime보다 이른 시간일 경우 실행
    // e.g. date : 2024.03.17 / currentTime : 2024.03.18
}
if(date.after(currentTime)){
	// date가 currentTime보다 나중 시간일 경우 실행
    // e.g. date : 2024.03.19 / currentTime : 2024.03.18
}
반응형

'Backend > JAVA' 카테고리의 다른 글

[Algorithm] 데일리 백준  (0) 2024.04.03
[Algorithm] 데일리 백준  (2) 2024.04.02
Response로 Json 생성  (0) 2024.02.19
Gradle-JDK이슈  (0) 2024.02.16
01/30 회고  (0) 2024.01.30