Programming/Web

프로그래밍 시간 표현 단위 Unix Time ( = Epoch Time ) 이란

Jan92 2021. 10. 24. 23:48

Unix Time, Epoch Time

 

프로그래밍을 하게 되면 '1635083262' 와 같은 형식의 숫자만으로 시간을 표현하는 경우가 있습니다. 

이 같은 표현 방식을 Unix Time 또는 Epoch Time 이라고 하는데요.

 

Unix Time, Epoch Time은 부르는 이름만 다를 뿐 같은 것을 의미합니다. (POSIX Time 이라고도 합니다.)

이것은 시간을 나타내는 방식으로, '1970년 1월 1일 00:00:00 협정 세계시(UTC)' 부터의 경과 시간을 초로 환산하여 정수로 나타낸 것입니다. 

 

* 유닉스 시간에서 윤초(Leap Second)는 반영하지 않습니다.

 

이 시간 표현 방식은 유닉스 계열의 운영체제나 여러 다른 운영 체제, 파일 형식들에서 사용되며, 어떤 일이 발생했을 때 무엇이 먼저 발생하고, 나중에 발생했는지를 판단할 수 있는 지표가 될 수 있습니다.

단번에 어떤 날짜인지 알 수 없듯이 가독성이 떨어진다는 단점이 있습니다.

 

 


 

 

이어서 Java에서 Unix Time을 가져오고, Unix Time을 다른 시간 형식으로 가공하는 법을 간단하게 살펴보겠습니다.

 

// 첫 번째 방법
Long time1 = Calendar.getInstance().getTime().getTime();

// 두 번째 방법
Long time2 = System.currentTimeMillis();    // 밀리세컨드 단위

 

Unix Time을 가져오는 방법,

 

첫 번째 방법은 Calendar.getInstance()로 Calendar 객체를 생성, getTime() 메서드로 Date 객체로 변환 후, 다시 Date 객체의 getTime() 메서드로 Long 타입의 시간 값을 가져오는 것입니다.

 

두 번째 방법은 System Class를 이용하는 방법입니다. currentTimeMillis() 메서드를 이용하여 밀리세컨드 단위의 Long 값을 가져올 수 있는데요. 첫 번째 방법에 비해 코드가 간결합니다.

 

* 두 방법 모두 결과 값이 밀리 세컨드로 유닉스 타임인 초 단위로 만들기 위해서는 * 1000이라는 추가 연산이 필요합니다.

 

 

 

 

Long time = 1635085610000L;    // 밀리세컨드 단위
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
date.setTime(time);
System.out.println(date);
// Sun Oct 24 23:26:50 KST 2021

String dateString = simpleDateFormat.format(date);
System.out.println(dateString);
// 2021-10-24 23:26:50

 

반대로 유닉스 타임을 Date 타입 또는 String 타입으로 변환하는 방법입니다.

 

먼저 밀리세컨드 단위의 Long 값을 가지고 Date 객체에 setTime() 메서드를 통하여 값을 적용합니다.

그리고 해당 Date 객체를 출력해보면 Sun Oct 24 23:26:50 KST 2021 이라는 값이 출력되는 것을 볼 수 있습니다.

 

또 SimpleDateFormat 객체를 이용하여 변형할 format을 설정하고 적용할 수 있습니다.

변형되는 타입을 "yyyy-MM-dd HH:mm:ss"로 설정한 결과물로 2021-10-24 23:26:50 이라는 출력물을 얻을 수 있습니다.

 

 

* 형식화 클래스인 SimpleDateFormat에 대해서는 추후 따로 한번 정리하여 링크할 수 있도록 하겠습니다.