본문 바로가기
카테고리 없음

[Java] System.currentTimeMillis() 값(유닉스 시간, Unix Time)을 Date 포맷으로 변경하기

by 왕 달팽이 2019. 5. 18.
반응형

자바에서 현재 시간 정보는 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

이 코드를 이용해서 좀 더 편하게 디버깅을 할 수 있다. 

반응형

댓글