자바에서 현재 시간 정보는 System.currentTimeMillis() 메소드를 이용해서 가져올 수 있다. System.currentTimeMillis() 메소드에서 얻어지는 값은 long 타입으로 세계 표준시(UTC)로 1970년 1월 1일 00시 00분 00초를 기점으로 현재까지 몇 밀리초(ms)가 흘렀는지를 기록한 값이다. 프로그래밍 세계에서는 흔히 '유닉스 시간(Unix Time)' 혹은 '파직스 시간(POSIX Time)'이라고 부른다.
자바를 이용해서 유닉스 타임을 얻어오는 코드는 다음과 같다.
long time = System.currentTimeMillis();
유닉스 타임을 이용해서 특정 코드의 수행 시간도 측정할 수 있다.
long start = System.currentTimeMillis();
// 수행 시간 측정을 원하는 메소드
function();
long start = System.currentTimeMillis();
프로그래밍에서 시간을 다룰 때 손쉽게 얻어 올 수 있는 유닉스 시간의 가장 큰 단점은 가독성이 떨어진다는 점이다. 예를 들어 1556985599178 라는 long 타입의 숫자는 분명 특정 시점의 시각을 의미한다. 하지만 단번에 어떤 날자인지는 알 수 없다.
유닉스 시간을 Date 포맷으로 변경
유닉스 시간을 사람이 읽을 수 있는 Date 포맷으로 변경해보자. 자바에서는 SimpleDataFormat 이라는 클래스를 지원해서 Date 타입의 데이터를 사람이 읽을 수 있는 형태의 포맷으로 변경할 수 있게 지원해준다.
long time = 1556985699278L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS");
Date date = new Date();
date.setTime(time);
String dateString = simpleDateFormat.format(date);
System.out.println(dateString);
이 코드를 실행시키면,
2019-05-05 01:01:39.278
이 값을 얻을 수 있다.
SimpeDateFormat에 사용한 포맷 문자열에서 YYYY는 년도를 4글자로 나타내겠다는 의미이다. MM은 월 정보를 2글자로 나타내겠다는 의미이며, dd는 일 정보를 2글자로 나타내겠다는 의미이다. (여기서 대문자로 DD 라고 입력하면 1년 중 그 날이 몇 번째 날인지를 나타낸다. 소문자로 dd 라고 쓰면 해당 월에서 몇 번째 달인지를 의미한다) HH는 몇 시인지 나타내는 정보이며, mm은 분을, ss는 초를 의미한다. 대문자로 SSS라고 쓰면 밀리초 정보를 나타내게 된다.
SimpleDateFormat 클래스의 날짜 형식
SimpleDateFormat 문자열에서의 각 알파벳의 의미는 다음과 같다.
Symbol | 설명 | 예제 |
y | year : 년도 | yy : 19, yyyy : 2019 |
M | Month in year : (1 ~ 12) 월 | M : 1, MM : 01, MMM : 1월 |
d | day in month : (1 ~ 31) 일 | d : 1 , dd : 01, ddd : 001, dddd : 0001 |
h | hour in am/pm : (1 ~ 12) 시 | h : 1, hh : 01, hhh : 001, hhhh : 0001 |
a | 오전/오후(AM/PM) | AM / PM |
k | hour in day : (1 ~ 24) 시 | 21 |
m | minute in hour : (0 ~ 59) 분 | 30 |
s | second in minute : (0 ~ 59) 초 | 12 |
w | week in year : 해당 년도의 몇 번째 주 (1 ~ 53) | 27 |
D | day in year : 해당 년도의 몇 번째 일 (1 ~ 366) | 345 |
E | day of week : 요일 (Mon ~ Sun) | Sat |
F | day of week in month : 해당 월의 몇 번째 요일 (1 ~ 5), 예를 들어 오늘이 월요일이면 이번 달의 몇 번째 월요일인지. | 2 |
G | era designator : 연대 (BC, AD) | AD |
H | hour in day : (0 ~ 23) 시 | 16 |
K | hour in am/pm : (0 ~ 11) 시 | 9 |
S | fractional seconds : 밀리초 (1/1000초) | 486 |
W | week in month : 해당월의 몇 번째 주인지 (1 ~ 5) | 4 |
z | time zone : 타임존 | +0900 |
Z | time zone (RFC 822) | KST |
이 코드를 이용해서 좀 더 편하게 디버깅을 할 수 있다.
댓글