Contents
see List작성일 2014. 09. 25.
Java 날짜와 시간 구하기 완벽 가이드
Java에서 현재 날짜와 시간을 구하는 다양한 방법입니다. Java 8 이전 방식과 java.time API(권장)를 모두 다룹니다.
1. Java 8+ LocalDateTime (권장)
import java.time.*;
import java.time.format.DateTimeFormatter;
// 현재 날짜와 시간
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 2024-01-15T14:30:25.123
// 현재 날짜만
LocalDate today = LocalDate.now();
System.out.println(today); // 2024-01-15
// 현재 시간만
LocalTime time = LocalTime.now();
System.out.println(time); // 14:30:25.123
// 포맷팅
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(formatter);
System.out.println(formatted); // 2024-01-15 14:30:25
2. 특정 날짜/시간 생성
// 특정 날짜
LocalDate date = LocalDate.of(2024, 1, 15);
LocalDate date2 = LocalDate.of(2024, Month.JANUARY, 15);
// 특정 시간
LocalTime time = LocalTime.of(14, 30, 0);
// 날짜 + 시간
LocalDateTime dateTime = LocalDateTime.of(2024, 1, 15, 14, 30, 0);
LocalDateTime dateTime2 = LocalDateTime.of(date, time);
3. 날짜 연산
LocalDate today = LocalDate.now();
// 더하기
LocalDate tomorrow = today.plusDays(1);
LocalDate nextWeek = today.plusWeeks(1);
LocalDate nextMonth = today.plusMonths(1);
// 빼기
LocalDate yesterday = today.minusDays(1);
LocalDate lastYear = today.minusYears(1);
// 특정 요일로 이동
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
4. 날짜 비교
LocalDate date1 = LocalDate.of(2024, 1, 15);
LocalDate date2 = LocalDate.of(2024, 1, 20);
date1.isBefore(date2); // true
date1.isAfter(date2); // false
date1.isEqual(date2); // false
// 기간 계산
Period period = Period.between(date1, date2);
System.out.println(period.getDays()); // 5
// 일수 차이
long days = ChronoUnit.DAYS.between(date1, date2); // 5
5. 타임존 처리
// 시스템 타임존
ZonedDateTime zonedNow = ZonedDateTime.now();
// 특정 타임존
ZonedDateTime seoulTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
ZonedDateTime utcTime = ZonedDateTime.now(ZoneId.of("UTC"));
// 타임존 변환
ZonedDateTime newYorkTime = seoulTime.withZoneSameInstant(ZoneId.of("America/New_York"));
6. 레거시 방식 (Java 7 이하)
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
// Date 사용
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(now);
// Calendar 사용
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 0부터 시작
int day = cal.get(Calendar.DAY_OF_MONTH);
7. 레거시 ↔ 신규 API 변환
// Date → LocalDateTime
Date date = new Date();
LocalDateTime ldt = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
// LocalDateTime → Date
LocalDateTime ldt = LocalDateTime.now();
Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
주요 포맷 패턴
| 패턴 | 예시 | 설명 |
|---|---|---|
| yyyy-MM-dd | 2024-01-15 | 날짜 |
| HH:mm:ss | 14:30:25 | 24시간 |
| hh:mm a | 02:30 PM | 12시간 |
| E | 월 | 요일 |
| EEEE | 월요일 | 요일(전체) |
java
| No | 작성일 | Title |
|---|---|---|
| 3356 | 2026. 08. 14. | Java record와 sealed interface로 안전한 API 응답 모델 만들기 |
| 3324 | 2026. 08. 05. | Java 가상 스레드 실전 적용 가이드: I/O 중심 API의 동시성 구조 바꾸기 |
| 3292 | 2026. 07. 28. | Java 메모리 사용량이 계속 늘어날 때: Heap Dump와 JFR로 누수 원인 찾기 |
| 3261 | 2026. 07. 20. | Java record로 API DTO를 단순하게 만드는 방법: 검증·변환·직렬화 실전 적용 |
| 3235 | 2026. 07. 12. | Java API 동시 호출 폭주 대응: Thread Pool, timeout, 장애 격리로 안정성 올리기 |
| 3178 | 2026. 07. 03. | Java 메모리 누수 진단 가이드: jcmd와 JFR로 원인 좁히기 |
| 3130 | 2026. 06. 25. | Java 가상 스레드 적용 전 점검: 블로킹 I/O와 동시성 제한 운영 가이드 |
| 3074 | 2026. 06. 17. | Java 스레드 작업 취소 설계: interrupt, Future, ExecutorService 종료를 제대로 연결하기 |
| 2985 | 2026. 06. 09. | Java 컨테이너 메모리 운영 가이드: 힙, 직접 메모리, GC 로그를 함께 점검하기 |
| 2928 | 2026. 06. 01. | Java Virtual Threads 운영 전환 가이드: 블로킹 API, 커넥션 풀, 관측 지표 점검법 |