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());
}
}
다음과 같이 설정이 된 모습을 알 수 있다.