Paradox Simulation

728x90
반응형

Java 기능 중에 원하는 시간대로 출력하기 위해서 사용하는 클래스가 있다.

 

SimpleDateFormat

실제로 원하는 날짜 규격을 맞추기 위해 사용되곤 한다.

 

예를 들자면 2022/06/23를 2022-06-23로 바꾸고 싶다던지.. 

등등 여러 군데에서 사용된다.

 

SimpleDateFormat에는 지정된 규격의 패턴이 존재하는데 다음과 같이 사용된다.

패턴 출력값
G 연대 (BC, AD) AD
y 연도 2022
M 월(1~12) 6
w 해당 연도의 몇번째 주인가?(1~53) 26
W 해당 월의 몇번째 주 4
D 해당 연도의 몇번째 일 174
d 해당 월의 몇번째 일 23
F 해당 월의 몇번째 요일 4
E 요일
a 오전/오후 PM
H 시간(24시) 13
h 시간(12시) 1
K 시간(0~11) 1
k 시간(1~24) 13
m 40
s 33
S 1/1000초 (마이크로초) 9
Z 타임존 +0900 (한국)
z 타임존(RFC 822) KST

 

 

이제 실제로 사용한 예시를 작성하겠다.

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

public class SimpleDateFormatTest {
    public static void main(String[] args) {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("연대 : G, 해당 연도 주 표시 : w, 해당 월의 주 표시 : W" +
                "\n" +
                "연월일 방식 1 : yyyy-MM-dd, 연월일 방식 2 : yy/MM/dd" +
                "\n" +
                "해당연도의 일 : D, 해당 월의 일 : d, 해당 월의 몇번째 요일 : F, 이날의 요일 : E" +
                "\n" +
                "지금은 오전? 오후? : a" +
                "\n" +
                "시간 표시 : HH-mm-ss, 시간 표시 2 : hh-mm-ss-S" +
                "\n" +
                "타임존? : Z, 타임존 2 : z");

        System.out.println(sdf.format(today));
    }
}

 

 

추가적으로 Calendar에 대해서 서술하겠다.

 

Calendar

자바 1.1부터 추가된 클래스이며, 날짜와 시간에 관한 처리를 수행하게 된다.

또한 불변 객체가 아니라서 값이 수정될 수 있다.

윤초 같은 특정한 상황을 고려하지 않는다.

Calendar는 date와 다르게 월 표시를 1~12가 아닌 0~11로 표현해야 한다.

 

 

Calendar.add

현재 시각에 100초를 더하는 예제다.

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        Calendar test = Calendar.getInstance();
        System.out.println(test.getTime());

        test.add(Calendar.SECOND, 100);
        System.out.println(test.getTime());
    }
}

 

만약 두 시간상에 전 후 가 뭔지 알고 싶을 땐 어떻게 써야 할까?

 

before / after

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        Calendar test = Calendar.getInstance();
        Calendar test2 = Calendar.getInstance();

        test.add(Calendar.SECOND, 100);
        System.out.println(test.before(test2));
        System.out.println(test.after(test2));
    }
}

test에는 100초 뒤의 값을, test2에는 현재의 값을 가져왔다.

물론 test가 test2보다 앞서 나가기 때문에 before에는 false값을, after에는 true 값을 당연히 가져왔다.

 

get

그럼 만약 연, 월, 일 등등 값을 가져오고 싶을 땐 어떻게 써야 할까?

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        Calendar test = Calendar.getInstance();
        System.out.println(test.get(Calendar.DAY_OF_WEEK));
        System.out.println(test.get(Calendar.MONTH) + 1);
        System.out.println(test.get(Calendar.DAY_OF_MONTH));
        System.out.println(test.get(Calendar.HOUR_OF_DAY));
        System.out.println(test.get(Calendar.MINUTE));
        System.out.println(test.get(Calendar.SECOND));
        System.out.println(test.get(Calendar.YEAR));
    }
}

 

get 메서드를 이용하여 다음과 같이 값을 가져왔다.

정상적으로 값을 가져오는 것을 볼 수 있었다.

 

set

그럼 현재 시간 만이 아닌 시간 값을 고정시키는 방법을 알아보자.

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        Calendar test = Calendar.getInstance();
        System.out.println(test.getTime());

        test.set(Calendar.YEAR, 2025);
        System.out.println(test.getTime());

        test.set(1900, 1, 1); // 1은 2월을 나타냄.
        System.out.println(test.getTime());

        test.set(1900, 1, 1, 12, 55, 11);
        System.out.println(test.getTime());
    }
}

 

다음과 같이 설정이 된 모습을 알 수 있다.

728x90
반응형
250x250
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band