BackEnd/Java

Date, SimpleDateFormat, currentTimeMillis()

yhtragramming 2019. 5. 13. 13:01

안녕하세요!!

 

이번 포스팅에서는 Date, SimpleDateFormate 클래스에 대해 알아보겠습니다.


1. Date

- 컴퓨터 시스템의 날짜와 시간을 얻어오는 Class.

- 1900년을 기준으로 날짜를 처리한다.

- Date Class에서 년, 월, 일, 시, 분, 초를 얻어오려면 get으로 시작하는 메소드를 사용하고, 수정하려면 set으로 시작하는 메소드를 사용하면 된다.

- 년을 얻어올 때는 1900을 더해서 얻어와야 하고, 넣어줄 때는 1900을 빼서 넣어줘야 한다.

- 월을 얻어올 때는 1을 더해서 얻어와야 하고, 넣어줄 때는 1을 빼서 넣어줘야 한다.

 

Date Class 자료형 'date'라는 새로운 객체를 생성하여 출력해보았습니다.

그 결과, 컴퓨터 시스템에 있는 시간이 나타나는데요.

 

하지만 모든 상황에서 요일, 월, 일이 다 필요한 것은 아니겠죠?

역시 요일, 월, 일, 시, 분, 초만 따로 추출하여 출력하는 메소드도 있습니다.

 

형식은 '인스턴스(객체).get얻어오고 싶은 요일/일/시/분/초'입니다.

 

객체 'date'의 연, 월, 일, 요일, 시간, 분, 초를 출력해보는 코드를 작성 후 출력해보겠습니다.

 

정상적으로 잘 나타나네요!

여기서 주의하실 점은 년, 월, 요일을 추출할 때입니다.


확인!

* 1900년을 기준으로 시스템이 계산을 하기 때문에, getYear()에는 1900을 더해줘야 한다는 것.

* 0월을 기준으로 시스템이 계산을 하기 때문에, getMonth()에는 1을 더해줘야 한다는 것.

* 요일은 '일요일, 월요일, 화요일...'로 출력되는 것이 아니라 0, 1, 2, ... 등의 숫자로 출력된다는 것.

일요일 = 0, 월요일 = 1, 화요일 = 2, 수요일 = 3, 목요일 = 4, 금요일 = 5, 토요일 = 6의 값을 갖는다.


그런데, 시스템의 시간을 full로 출력해보면

"Sat Apr 14 23:48:54 KST 2018"...

꼭 이런 방식으로만 시스템 시간을 가져올 수밖에 없는 걸까요?

 

역시 우리의 Java는 시간 출력 방식도 설정하여 출력할 수 있는 기능을 제공합니다.

그 기능을 알아보기 전에, 지정할 수 있는 형식의 종류는 어떤 것이 있는지 알아볼까요?

 

잠시 Oracle 홈페이지로 들어가겠습니다.

 

처음에 Java를 설치할 때와 같은 루트로 들어가면 됩니다.

메인 화면의 '시험판 및 다운로드'를 클릭합니다.

 

 

'개발자용 Java'를 클릭합니다.

 

오른쪽 메뉴의 'Java Resources, Java APIs'를 선택합니다.

 

컴퓨터에 설치되어 있는 Java 버전을 선택하여 클릭합니다.

(저는 Java SE 8로 들어가겠습니다.)

 

그러면 Java에 있는 여러가지 Class와 메소드에 대해 정리가 되어 있는 페이지가 나오는데요.

 

'ctrl + f'를 눌러 'SimpleDateFormat'을 검색합니다.

왼쪽 메뉴에서 'SimpleDateFormat'을 선택합니다.

 

스크롤을 좀 더 내려보면, 다음과 같은 표가 보입니다.

그리고 Date and Time Pattern열(Column)에서 지정 가능한 형식의 리스트를 볼 수 있습니다.

해당 형식을 지정했을 때의 출력 값은 Result열을 참고하시면 됩니다.

 

그럼 위의 형태에 따라 날짜 서식을 지정하여 출력해볼까요?

 

2. SimpleDateFormat

- 날짜 및 시간 출력 서식을 지정하는 Class

- 날짜 및 시간 서식에 사용되는 영문자를 제외한 나머지 문자는 입력하는 그대로 출력된다.

- 형식 : SimpleDateFormat 객체 = new SimpleDateFormat("날짜 및 시간 서식");

 

사용 예를 살펴보기 위해 SimpleDateFormat Class의 객체를 sdf1, sdf2로 2개 생성하겠습니다.

그리고 시스템 시간을 지정한 형식 별로 출력해보겠습니다.

 

현재 시간을 입력 받아 지정한 형식으로 출력이 완료된 모습입니다.


Tip!

SimpleDateFormat를 일일이 다 입력하기 힘드시죠?

이처럼 의미 단위가 시작될 때마다 대문자로 표기하는 것을 '낙타식 표기법'이라고 하는데요.

이렇게 긴 이름을 가진 Class나 메소드는,

"의미를 가진 각 단어가 시작되는 첫 문자 이니셜"만으로도 자동 완성이 가능합니다.

SimpleDateFormat는 SDF로 입력하시고, ctrl + spacebar!


3. currentTimeMillis()

- 1970년 1월 1일 자정부터 이 메소드가 실행되는 순간까지 지나온 시간을 1/1000초 단위로 얻어온다.

 

프로그래밍 언어끼리도 상호 경쟁을 하는 시대라고 들었습니다.

C계열의 언어도 C++, C#으로 진화해왔는데, Java를 의식한다는 카더라를 들은 적이 있습니다.

C++에서는 <time.h>이라는 header를 추가하여, time(NULL)이라는 함수를 사용해봤는데요.

 

시스템의 시간을 나노 단위로 세분화하여 가지고 올 수 있는 메소드가 Java에도 있습니다.

바로 currentTimeMills() 메소드입니다.

 

먼저 long 자료형을 가진 time이라는 변수를 선언하고,

시스템의 시간을 1/1000초 단위로 얻어오는 currentTimeMills() 메소드를 실행해보겠습니다.

 

1523720366888 이라는 어마어마한 숫자가 나오네요.

지금 이 순간도 계속 카운드되고 있겠죠...?ㅎㅎ

currentTimeMills() 메소드의 활용 예는 여러가지가 있겠지만,

난수를 구할 때 유용할 것 같은 생각이 듭니다.


지금까지 Date, SimpleDateFormat, currentTimeMillis()에 대해 알아보았습니다.

 

감사합니다.