많은 애플리케이션에서 고유한 값이나 정밀한 시간 정보가 필요할 때, 날짜 포맷을 활용합니다. 일반적으로 "yyyyMMddHHmmss" 형태로 초 단위까지 기록하지만, 초 단위만으로는 여러 이벤트가 겹칠 수 있습니다. 이런 상황에서 밀리초(millisecond)를 추가하여 더 정밀한 시간을 기록하면 고유성과 정확도를 높일 수 있습니다.
기본 초 단위 날짜 포맷
초 단위까지 포함된 날짜 포맷을 만드는 기본적인 방법은 아래와 같습니다:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// 초 단위 날짜 포맷
String dateTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
System.out.println(dateTime);
}
}
출력예시
20241129121545
이 방식은 초 단위로 현재 시간을 문자열로 포맷팅해주는 간단한 방법입니다. 하지만 초 단위만으로는 고속 처리 환경에서 값이 중복될 가능성이 있습니다.
밀리초 단위를 포함한 날짜 포맷
밀리초를 추가하려면 포맷 문자열에 SSS를 포함시키면 됩니다. 예를 들어 "yyyyMMddHHmmssSSS" 형태로 작성하면, 밀리초까지 포함된 정밀한 시간 값을 얻을 수 있습니다.
SimpleDateFormat 클래스에서 SSS는 밀리초(millisecond)를 의미합니다. 밀리초는 1초를 1000등분한 단위로, 0부터 999까지의 값을 가집니다.
예를 들어, 현재 시간이 2024년 11월 29일 12시 15분 45초 123밀리초라면,
포맷 "yyyyMMddHHmmssSSS"를 사용하면 아래와 같은 결과를 얻습니다:
import java.text.SimpleDateFormat;
import java.util.Date;
public class MillisecondExample {
public static void main(String[] args) {
// 밀리초 단위 포함 날짜 포맷
String preciseDateTime = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
System.out.println(preciseDateTime);
}
}
20241129121545123
이 결과는 초 뒤에 밀리초 값(000~999)이 추가되어 중복 가능성을 크게 줄이는 고유값을 제공합니다.
다양한 날짜 포맷 예제
다음은 SimpleDateFormat을 활용한 여러 포맷 예시입니다
다양한 포맷 코드와 결과
포맷 코드설명출력 예시
yyyy-MM-dd | 기본 날짜 형식 | 2024-11-29 |
yyyy-MM-dd HH:mm:ss | 날짜와 시간 (초 단위) | 2024-11-29 12:15:45 |
yyyy-MM-dd HH:mm:ss.SSS | 날짜와 시간 (밀리초 포함) | 2024-11-29 12:15:45.789 |
hh:mm:ss a | 12시간제 시간 형식 | 12:15:45 PM |
EEEE, MMMM dd | 요일과 날짜 표시 | Friday, November 29 |
예시코드
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExamples {
public static void main(String[] args) {
// 현재 시간
Date now = new Date();
// 1. 기본 날짜 형식 (yyyy-MM-dd)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("기본 날짜 형식: " + dateFormat.format(now));
// 2. 상세 날짜 시간 형식 (yyyy-MM-dd HH:mm:ss)
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("상세 날짜 시간 형식: " + dateTimeFormat.format(now));
// 3. 12시간제 시간 형식 (hh:mm:ss a)
SimpleDateFormat time12HourFormat = new SimpleDateFormat("hh:mm:ss a");
System.out.println("12시간제 시간 형식: " + time12HourFormat.format(now));
// 4. 밀리초 포함 시간 형식 (yyyy-MM-dd HH:mm:ss.SSS)
SimpleDateFormat preciseTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println("밀리초 포함 시간 형식: " + preciseTimeFormat.format(now));
// 5. 간결한 날짜/시간 형식 (yyMMddHHmm)
SimpleDateFormat compactFormat = new SimpleDateFormat("yyMMddHHmm");
System.out.println("간결한 날짜/시간 형식: " + compactFormat.format(now));
// 6. 주의 이름 포함 (EEEE, yyyy-MM-dd)
SimpleDateFormat dayOfWeekFormat = new SimpleDateFormat("EEEE, yyyy-MM-dd");
System.out.println("주의 이름 포함 형식: " + dayOfWeekFormat.format(now));
// 7. TimeZone 포함 형식 (yyyy-MM-dd HH:mm:ss Z)
SimpleDateFormat timeZoneFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
System.out.println("TimeZone 포함 형식: " + timeZoneFormat.format(now));
// 8. 커스텀 형식 (MMMM dd, yyyy 'at' hh:mm a)
SimpleDateFormat customFormat = new SimpleDateFormat("MMMM dd, yyyy 'at' hh:mm a");
System.out.println("커스텀 형식: " + customFormat.format(now));
}
}
출력 예시
현재 시간이 2024년 11월 29일 오후 12시 34분 56초라고 가정하면, 각 포맷의 출력은 다음과 같습니다:
1.기본 날짜 형식:
2024-11-29
2. 상세 날짜 시간 형식:
2024-11-29 12:34:56
3. 12시간제 시간 형식:
12:34:56 PM
4. 밀리초 포함 시간 형식:
2024-11-29 12:34:56.789
5. 간결한 날짜/시간 형식:
2411291234
6. 주의 이름 포함 형식:
Friday, 2024-11-29
7. TimeZone 포함 형식:
2024-11-29 12:34:56 +0900
8. 커스텀 형식:
November 29, 2024 at 12:34 PM
밀리초 날짜 값 활용 사례
파일 이름 생성
밀리초 단위로 파일 이름을 생성하면 이름이 겹칠 가능성이 매우 낮아집니다.
String fileName = "log_" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ".txt";
System.out.println(fileName);
이벤트 트래킹
실시간 이벤트 로그를 남길 때 밀리초 단위를 포함하면 더 정밀한 타임스탬프를 기록할 수 있습니다.
String eventTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
System.out.println("Event occurred at: " + eventTime);
트랜잭션 ID 생성
데이터베이스나 메시징 시스템에서 트랜잭션 ID를 생성할 때 시간 기반의 정밀한 값을 사용할 수 있습니다.
예시로는 밀리초 단위의 타임스탬프를 포함하여 고유한 트랜잭션 ID를 생성합니다.
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class TransactionIdGenerator {
public static void main(String[] args) {
// 트랜잭션 ID 생성
String transactionId = generateTransactionId();
System.out.println("Generated Transaction ID: " + transactionId);
}
public static String generateTransactionId() {
// 현재 시간 (밀리초 포함)
String timestamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
// 고유한 UUID 일부 추가 (충돌 방지)
String uniquePart = UUID.randomUUID().toString().substring(0, 8); // UUID 일부 사용
// 트랜잭션 ID 조합
return timestamp + "-" + uniquePart;
}
}
정리
밀리초 단위를 포함하면 고유성과 정확성을 높일 수 있으며, 파일 이름, 로그, 트랜잭션 ID와 같은 다양한 상황에서 활용 가능합니다. Java의 SimpleDateFormat을 사용하여 간단히 구현할 수 있습니다.
'JAVA' 카테고리의 다른 글
Stream API에서 Null 체크 처리하기 (0) | 2024.11.26 |
---|---|
Java에서 NullPointerException 피하기 (0) | 2024.11.16 |
[Java] Reflection를 활용한 런타임 동적 프로그래밍 (1) | 2024.11.15 |