[JAVA] Time

2025. 2. 20. 23:01Languages/JAVA

 

 

💻 회사에서 업무를 진행하면서, 시간을 Java 언어로 옮기는 데 미숙한 부분이 있었습니다. 따라서 글로 정리하면서 시간에 대한 개념을 정리하려고 합니다.

 

추가로 해당 내용은 예전, 인프런에서 [김영한의 실전 자바 - 중급 1편]에서 공부했던 내용도 포함되어 있습니다. 강의를 정말 추천 드리오니,  궁금하신 분들은 해당 강의 꼭꼭 참고해주세요!!


Time

 

저희가 살아가면서 시간과 공간이라는 개념은 떼려야 뗄 수 없는 중요한 개념입니다. 예시로, 출근 '시간'이 되면 직장인들은 출근 '장소(회사)'로 출근하게 됩니다. 어떤 사건(event)가 발생했을 때, 이런 질문부터 나오게 됩니다. "언제 발생한 거야?" "어디서 사건이 발생했는데..?"

 

프로그램에서도 마찬가지입니다. 시간과 공간은 굉장히 중요한 개념이지요. 프로그램이 운영/개발자가 원하는 것처럼 잘 운영되면 참 좋겠지만... 때로는 어떤 문제가 발생하여 장애가 발생하곤 합니다. 이럴 때 장애를 복구하기 위해, '언제' '어디'에서 장애가 발생했는지.. 원인을 확인해야만 합니다. 

 

놀라운 건 시간이 각 나라, 각 지역마다 미묘하게 다르다는 겁니다. 예를 들어, 우리나라의 경우 KST를 사용하게 됩니다. KST는 Korea Standard Time의 약어로, 우리나라의 시간을 표현합니다. 이는 UTC보다 9시간이나 빠른데요. 여기서 UTC는 Coordinated Universal Time으로 세계 표준 시간입니다. 예를 들어, UTC가 오전 02:00라면, KST는 11:00가 되는 겁니다.


JAVA

그렇다면 프로그래밍 언어 중 JAVA에서는 시간과 관련하여, 어떤 라이브러리를 활용할까요? 현재는 Java 8에서 도입한 java.time 패키지를 활용하고 있습니다.

 

 

Overview (The Java™ Tutorials > Date Time > Standard Calendar)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag

docs.oracle.com

 

상단의 페이지에서 굉장히 잘 설명이 되어 있는데요. 위에서 3가지의 표현을, 아래의 테이블에 옮겨봤습니다.

Class or Enum Output
LocalDateTime 2020-01-01T00:01:00.000
ZonedDateTime 2020-01-01T00:01:00.000+09:00[Asia/Tokyo]
Instant 2020-01-01T00:00:00.111Z
https://docs.oracle.com/javase/tutorial/datetime/iso/overview.html 내용 일부 발췌 

 

1. LocalDateTime

날짜와 시간을 다루고 있습니다. now()로 현 시간을 확인할 수도 있고, of()를 통해 직접 시간을 구성할 수도 있습니다.

 

2. ZonedDateTime

타임존이 포함되어 시간대를 표현할 수 있습니다. 예를 들어  2020-01-01T00:01:00.000+09:00[Asia/Tokyo] 라면, 2020년 1월 1일 00시 01분 이고 UTC보다 9시간 빠른 도쿄 시간임을 확인할 수 있습니다.

ZonedDateTime time = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

 

3. Instant

앞서 말씀드렸던 UTC를 기준으로 한 시간을 말합니다.

Instant now = Instant.now();			  // 현재 시간
Instant epoch = Instant.ofEpochSecond(0); // 출력 : 1970-01-01T00:00:00

 

참고로 epoch 시간은 1970년 1월 1일 00시 00분 00초로부터 얼마만큼 지났는지 확인할 수 있는 시간입니다.

 

The epoch time is defined in the context of Unix-based operating systems and programming

as the amount of seconds that have passed since January 1, 1970, at 00:00:00 Coordinated Universal Time (UTC).

- How can Java get Epoch Time, and what is it? 중에서

 

추가로, 간격을 나타내는 Period나 Duration도 있습니다!


Formatter

위에서 언급한 시간을 그대로 이용하기도 하지만, 시간을 Formatter로 가공하여 클라이언트에게 제공해주거나 데이터나 log 등에 가공된 시간을 추가하기도 합니다.

 

1. 날짜, 시간 -> 문자

LocalDateTime time = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String parsedTime = time.format(formatter);

 

2. 문자 -> 날짜, 시간

String dateTimeStr = "2025-02-20 22:30:45";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.parse(dateTimeStr, formatter);

 

추가로, Formatter에서 자주 사용하는 패턴이 있습니다.

Pattern yyyy MM dd HH mm ss yyyy-MM-dd HH:mm:ss
what is it? 연도 시간 날짜 및 시간

 

 

References 

1. 인프런 : 김영한의 실전 자바 - 중급 2편

2. How can Java get Epoch Time, and what is it?

'Languages > JAVA' 카테고리의 다른 글

[JAVA] TOCTOU : Time of Check to Time of Use  (0) 2025.07.28
[JAVA] 값 복사 vs 참조 복사  (0) 2025.02.25
[JAVA] Stream++  (1) 2024.10.05
[JAVA] Optional  (2) 2024.09.08
[JAVA] max()  (0) 2024.04.04