유닉스 타임스탬프를 날짜로 변환기: 12/24시간 형식 지원
유닉스 타임스탬프를 사람이 읽을 수 있는 날짜와 시간으로 변환합니다. 이 간단하고 사용자 친화적인 변환 도구를 사용하여 12시간 및 24시간 형식 중에서 선택하세요.
유닉스 타임스탬프 변환기
변환된 날짜 및 시간
문서
유닉스 타임스탬프 변환기
소개
유닉스 타임스탬프(또는 POSIX 시간 또는 에포크 시간이라고도 함)는 특정 시점을 설명하는 시스템입니다. 이는 1970년 1월 1일(자정 UTC/GMT) 이후 경과된 초의 수로, 윤초는 포함되지 않습니다. 유닉스 타임스탬프는 컴퓨터 시스템 및 프로그래밍 언어에서 널리 사용되며, 특정 순간을 간결하고 언어에 독립적인 방식으로 표현합니다.
이 변환기를 사용하면 유닉스 타임스탬프를 사람이 읽을 수 있는 날짜 및 시간 형식으로 변환할 수 있습니다. 이는 다양한 지역 및 개인 선호를 수용하기 위해 12시간(AM/PM) 및 24시간 시간 형식을 모두 지원합니다.
유닉스 타임스탬프 작동 원리
유닉스 타임스탬프는 유닉스 에포크(1970년 1월 1일, 00:00:00 UTC) 이후 경과한 초의 수로 계산됩니다. 이는 시간 차이를 계산하고 날짜를 간결한 형식으로 저장하는 데 특히 유용합니다.
유닉스 타임스탬프를 달력 날짜로 변환하는 수학적 과정은 여러 단계를 포함합니다:
- 유닉스 에포크(1970년 1월 1일, 00:00:00 UTC)에서 시작합니다.
- 타임스탬프의 초 수를 추가합니다.
- 윤년, 다양한 월 길이 및 기타 달력 복잡성을 고려합니다.
- 필요 시 시간대 조정을 적용합니다.
예를 들어, 유닉스 타임스탬프 1609459200
은 2021년 1월 1일 금요일, 00:00:00 UTC를 나타냅니다.
변환 공식은 다음과 같이 표현할 수 있습니다:
대부분의 프로그래밍 언어 및 운영 체제는 이 변환을 처리하는 내장 함수를 제공하여 복잡한 달력 계산을 추상화합니다.
시간 형식 옵션
이 변환기는 두 가지 시간 형식 옵션을 제공합니다:
-
24시간 형식(군사 시간이라고도 함): 시간 범위는 0에서 23까지이며, AM/PM 표시가 없습니다. 예를 들어, 오후 3시는 15:00으로 표시됩니다.
-
12시간 형식: 시간 범위는 1에서 12까지이며, 자정부터 정오까지는 AM(ante meridiem), 정오부터 자정까지는 PM(post meridiem)으로 표시됩니다. 예를 들어, 24시간 형식의 15:00은 오후 3:00으로 표시됩니다.
이 형식 간의 선택은 주로 지역 관습 및 개인 선호에 따라 다릅니다:
- 24시간 형식은 유럽, 라틴 아메리카, 아시아의 대부분과 과학, 군사 및 의료 분야에서 전 세계적으로 일반적으로 사용됩니다.
- 12시간 형식은 미국, 캐나다, 호주 및 일부 다른 영어 사용 국가에서 일상적으로 사용됩니다.
엣지 케이스 및 제한 사항
유닉스 타임스탬프를 사용할 때는 여러 엣지 케이스 및 제한 사항을 인식하는 것이 중요합니다:
-
음수 타임스탬프: 이는 유닉스 에포크(1970년 1월 1일) 이전의 날짜를 나타냅니다. 수학적으로는 유효하지만 일부 시스템에서는 음수 타임스탬프를 올바르게 처리하지 못할 수 있습니다.
-
2038년 문제: 유닉스 타임스탬프는 종종 32비트 부호 있는 정수로 저장되며, 이는 2038년 1월 19일에 오버플로우됩니다. 이 시점 이후 32비트 시스템은 수정되지 않는 한 시간을 올바르게 나타낼 수 없습니다.
-
매우 큰 타임스탬프: 매우 먼 미래의 날짜는 일부 시스템에서 표현할 수 없거나 일관되게 처리되지 않을 수 있습니다.
-
윤초: 유닉스 시간은 지구의 불규칙한 회전을 보상하기 위해 UTC에 추가되는 윤초를 고려하지 않습니다. 이는 유닉스 시간이 천문학적 시간과 정확히 동기화되지 않음을 의미합니다.
-
시간대 고려 사항: 유닉스 타임스탬프는 순간을 UTC로 나타냅니다. 로컬 시간으로 변환하려면 추가적인 시간대 정보가 필요합니다.
-
서머타임: 타임스탬프를 로컬 시간으로 변환할 때 서머타임 전환의 복잡성을 고려해야 합니다.
사용 사례
유닉스 타임스탬프는 컴퓨팅 및 데이터 관리의 수많은 응용 프로그램에서 사용됩니다:
-
데이터베이스 레코드: 타임스탬프는 항목이 생성되거나 수정된 시간을 기록하는 데 일반적으로 사용됩니다.
-
웹 개발: HTTP 헤더, 쿠키 및 캐싱 메커니즘은 종종 유닉스 타임스탬프를 사용합니다.
-
로그 파일: 시스템 로그는 일반적으로 이벤트를 정확한 연대순으로 기록하기 위해 유닉스 타임스탬프를 사용합니다.
-
버전 관리 시스템: Git 및 기타 VCS는 커밋이 이루어진 시간을 기록하기 위해 타임스탬프를 사용합니다.
-
API 응답: 많은 웹 API는 데이터가 생성된 시간 또는 리소스가 마지막으로 수정된 시간을 나타내기 위해 타임스탬프를 포함합니다.
-
파일 시스템: 파일 생성 및 수정 시간은 종종 유닉스 타임스탬프로 저장됩니다.
-
세션 관리: 웹 애플리케이션은 타임스탬프를 사용하여 사용자 세션이 만료되어야 할 때를 결정합니다.
-
데이터 분석: 타임스탬프는 분석 애플리케이션에서 시간적 데이터를 처리하는 표준화된 방법을 제공합니다.
대안
유닉스 타임스탬프는 널리 사용되지만 특정 맥락에서 더 적합할 수 있는 대체 시간 표현 형식이 있습니다:
-
ISO 8601: 표준화된 문자열 형식(예: "2021-01-01T00:00:00Z")으로, 사람이 읽을 수 있으면서도 정렬 가능성을 유지합니다. 데이터 교환 및 사용자 인터페이스 애플리케이션에서 선호되는 경우가 많습니다.
-
RFC 3339: 인터넷 프로토콜에서 사용되는 ISO 8601의 프로필로, 더 엄격한 형식 요구 사항을 가지고 있습니다.
-
인간이 읽을 수 있는 형식: 로컬화된 날짜 문자열(예: "2021년 1월 1일")은 직접적인 사용자 상호작용에 더 적합하지만 계산에는 덜 적합합니다.
-
마이크로소프트 FILETIME: 1601년 1월 1일부터의 100나노초 간격을 나타내는 64비트 값으로, Windows 시스템에서 사용됩니다.
-
율리우스 날짜 번호: 천문학 및 일부 과학 응용 프로그램에서 사용되며, 기원전 4713년 1월 1일부터 날짜를 계산합니다.
시간 형식의 선택은 다음과 같은 요소에 따라 달라집니다:
- 필요한 정밀도
- 인간 가독성 요구
- 저장 제약
- 기존 시스템과의 호환성
- 표현해야 할 날짜 범위
역사
유닉스 시간의 개념은 1960년대 후반과 1970년대 초반에 벨 연구소에서 유닉스 운영 체제가 개발되면서 시작되었습니다. 에포크로 1970년 1월 1일을 선택한 것은 다소 임의적이었지만 당시에는 실용적이었습니다. 이는 관심 있는 날짜에 대한 저장 요구 사항을 최소화할 수 있을 만큼 최근이었지만, 역사적 데이터에 유용할 만큼 충분히 먼 과거였습니다.
원래 구현은 초의 수를 저장하기 위해 32비트 부호 있는 정수를 사용했으며, 이는 당시 유닉스 시스템의 예상 수명에 적합했습니다. 그러나 이 결정은 2038년 문제(때때로 "Y2K38" 또는 "유닉스 밀레니엄 버그"라고도 함)를 초래했습니다. 32비트 부호 있는 정수는 2038년 1월 19일(03:14:07 UTC)까지의 날짜만 나타낼 수 있습니다.
유닉스 및 유닉스 유사 운영 체제가 인기를 얻으면서 유닉스 타임스탬프는 컴퓨팅에서 사실상 표준이 되었습니다. 이는 수많은 프로그래밍 언어, 데이터베이스 및 애플리케이션에서 채택되어 유닉스 환경을 넘어 널리 사용되었습니다.
현대 시스템은 점점 더 64비트 정수를 타임스탬프에 사용하여 에포크에서 약 2920억 년의 범위를 양쪽으로 확장하여 2038년 문제를 효과적으로 해결하고 있습니다. 그러나 레거시 시스템 및 애플리케이션은 여전히 취약할 수 있습니다.
유닉스 타임스탬프의 단순성과 유용성은 더 정교한 시간 표현 형식이 개발되었음에도 불구하고 계속해서 그 relevance를 보장했습니다. 이는 여전히 컴퓨팅의 기본 개념으로, 우리의 디지털 인프라의 많은 부분을 뒷받침하고 있습니다.
코드 예제
다음은 다양한 프로그래밍 언어에서 유닉스 타임스탬프를 사람이 읽을 수 있는 날짜로 변환하는 방법의 예입니다:
1// 자바스크립트 타임스탬프 변환
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // 새로운 Date 객체 생성(자바스크립트는 밀리초를 사용함)
4 const date = new Date(timestamp * 1000);
5
6 // 형식 옵션
7 const options = {
8 year: 'numeric',
9 month: 'long',
10 day: 'numeric',
11 weekday: 'long',
12 hour: use12Hour ? 'numeric' : '2-digit',
13 minute: '2-digit',
14 second: '2-digit',
15 hour12: use12Hour
16 };
17
18 // 로케일 형식을 사용하여 문자열로 변환
19 return date.toLocaleString(undefined, options);
20}
21
22// 예제 사용
23const timestamp = 1609459200; // 2021년 1월 1일 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // 24시간 형식
25console.log(convertUnixTimestamp(timestamp, true)); // 12시간 형식
26
1# 파이썬 타임스탬프 변환
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # 유닉스 타임스탬프를 datetime 객체로 변환
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # 날짜 문자열 형식
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12시간 형식 AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # 24시간 형식
13
14 return date.strftime(format_string)
15
16# 예제 사용
17timestamp = 1609459200 # 2021년 1월 1일 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # 24시간 형식
19print(convert_unix_timestamp(timestamp, True)) # 12시간 형식
20
1<?php
2// PHP 타임스탬프 변환
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // 형식 문자열
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // 12시간 형식 AM/PM
7 : 'l, F j, Y H:i:s'; // 24시간 형식
8
9 // 날짜 변환 및 형식
10 return date($formatString, $timestamp);
11}
12
13// 예제 사용
14$timestamp = 1609459200; // 2021년 1월 1일 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // 24시간 형식
16echo convertUnixTimestamp($timestamp, true) . "\n"; // 12시간 형식
17?>
18
1// 자바 타임스탬프 변환
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class UnixTimestampConverter {
8 public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
9 // 유닉스 타임스탬프를 Instant로 변환한 후 LocalDateTime으로 변환
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // 원하는 형식에 따라 포맷터 생성
14 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
15 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
16 );
17
18 // 날짜 형식화
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 2021년 1월 1일 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // 24시간 형식
25 System.out.println(convertUnixTimestamp(timestamp, true)); // 12시간 형식
26 }
27}
28
1// C# 타임스탬프 변환
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // 유닉스 타임스탬프를 DateTime으로 변환
9 // 유닉스 타임스탬프는 1970-01-01 이후의 초 수
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // 12시간 또는 24시간 선호에 따라 형식 문자열 설정
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12시간 형식 AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24시간 형식
16
17 // 형식화된 날짜 문자열 반환
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 2021년 1월 1일 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24시간 형식
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // 12시간 형식
26 }
27}
28
1# 루비 타임스탬프 변환
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # 유닉스 타임스탬프를 Time 객체로 변환
6 time = Time.at(timestamp)
7
8 # 12시간 또는 24시간 선호에 따라 형식
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # 12시간 형식 AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # 24시간 형식
13 end
14end
15
16# 예제 사용
17timestamp = 1609459200 # 2021년 1월 1일 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # 24시간 형식
19puts convert_unix_timestamp(timestamp, true) # 12시간 형식
20
1// Go 타임스탬프 변환
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // 유닉스 타임스탬프를 Time으로 변환
11 t := time.Unix(timestamp, 0)
12
13 // 12시간 또는 24시간 선호에 따라 형식 문자열 생성
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // 12시간 형식 AM/PM
17 } else {
18 formatString += "15:04:05" // 24시간 형식
19 }
20
21 // 형식화된 시간 반환
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 2021년 1월 1일 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // 24시간 형식
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // 12시간 형식
29}
30
1// 스위프트 타임스탬프 변환
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // 유닉스 타임스탬프를 Date로 변환
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // DateFormatter 생성
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // 12시간 또는 24시간 선호에 따라 시간 스타일 설정
13 if use12Hour {
14 formatter.timeStyle = .medium
15 formatter.amSymbol = "AM"
16 formatter.pmSymbol = "PM"
17 } else {
18 formatter.timeStyle = .medium
19 formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
20 }
21
22 // 형식화된 날짜 반환
23 return formatter.string(from: date)
24}
25
26// 예제 사용
27let timestamp = 1609459200 // 2021년 1월 1일 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24시간 형식
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // 12시간 형식
30
1# R 타임스탬프 변환
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # 유닉스 타임스탬프를 POSIXct datetime으로 변환
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # 12시간 또는 24시간 선호에 따라 형식
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # 12시간 형식 AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # 24시간 형식
11 }
12
13 # 형식화된 날짜 문자열 반환
14 format(date_time, format_string)
15}
16
17# 예제 사용
18timestamp <- 1609459200 # 2021년 1월 1일 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # 24시간 형식
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # 12시간 형식
21
1% MATLAB 타임스탬프 변환
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % 유닉스 타임스탬프를 MATLAB datetime으로 변환
4 % MATLAB 날짜는 1900-01-01 이후의 날짜로, 1 = 1900-01-01
5 % 유닉스 타임스탬프는 1970-01-01 이후의 초 수
6
7 % 먼저 Excel 날짜 형식으로 변환
8 % 25569는 1900-01-01과 1970-01-01 사이의 날짜 수입니다.
9 excelDate = (timestamp / 86400) + 25569;
10
11 % 12시간 또는 24시간 선호에 따라 형식 설정
12 if use12Hour
13 formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy h:mm:ss AM/PM');
14 else
15 formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy hh:mm:ss');
16 end
17end
18
19% 예제 사용
20timestamp = 1609459200; % 2021년 1월 1일 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % 24시간 형식
22disp(convertUnixTimestamp(timestamp, true)) % 12시간 형식
23
1' Excel VBA 타임스탬프 변환
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' 유닉스 타임스탬프를 Excel 날짜/시간으로 변환
4 ' Excel 날짜는 1900-01-01 이후의 날짜로, 1 = 1900-01-01
5 ' 유닉스 타임스탬프는 1970-01-01 이후의 초 수
6
7 ' 먼저 Excel 날짜 형식으로 변환
8 ' 25569는 1900-01-01과 1970-01-01 사이의 날짜 수입니다.
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' 12시간 또는 24시간 선호에 따라 형식 설정
13 If use12Hour Then
14 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
15 Else
16 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
17 End If
18End Function
19
20' 워크시트에서 사용:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' 12시간 형식
22' =ConvertUnixTimestamp(1609459200, FALSE) ' 24시간 형식
23
엣지 케이스 처리
유닉스 타임스탬프를 사용할 때는 엣지 케이스를 올바르게 처리하는 것이 중요합니다. 다음은 일반적인 엣지 케이스를 처리하는 방법의 예입니다:
1// 자바스크립트 엣지 케이스 처리
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // 타임스탬프가 유효한지 확인
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "유효하지 않은 타임스탬프";
6 }
7
8 // 음수 타임스탬프 확인(1970년 이전의 날짜)
9 if (timestamp < 0) {
10 // 일부 브라우저는 음수 타임스탬프를 올바르게 처리하지 않을 수 있음
11 // 1970년 이전의 날짜에 대해 더 강력한 접근 방식 사용
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "유효하지 않은 날짜(1970년 이전)";
15 }
16 }
17
18 // Y2K38 문제 확인(32비트 시스템의 경우)
19 const maxInt32 = 2147483647; // 32비트 부호 있는 정수의 최대 값
20 if (timestamp > maxInt32) {
21 // 현대 자바스크립트에서 매우 큰 타임스탬프에 대해 BigInt 사용 고려
22 console.warn("타임스탬프가 32비트 정수 한도를 초과합니다(Y2K38 문제)");
23 }
24
25 // 정상 변환 진행
26 try {
27 const date = new Date(timestamp * 1000);
28 const options = {
29 year: 'numeric',
30 month: 'long',
31 day: 'numeric',
32 weekday: 'long',
33 hour: use12Hour ? 'numeric' : '2-digit',
34 minute: '2-digit',
35 second: '2-digit',
36 hour12: use12Hour
37 };
38 return date.toLocaleString(undefined, options);
39 } catch (error) {
40 return "타임스탬프 변환 중 오류: " + error.message;
41 }
42}
43
참고 문헌
-
"유닉스 시간." 위키백과, 위키미디어 재단, https://ko.wikipedia.org/wiki/유닉스_시간
-
"2038년 문제." 위키백과, 위키미디어 재단, https://ko.wikipedia.org/wiki/2038년_문제
-
올슨, 아서 데이비드. "달력 시간의 복잡성." 오픈 그룹, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." 위키백과, 위키미디어 재단, https://ko.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: 인터넷의 날짜 및 시간: 타임스탬프." 인터넷 엔지니어링 태스크 포스(IETF), https://tools.ietf.org/html/rfc3339
-
커니한, 브라이언 W., 그리고 데니스 M. 리치. "C 프로그래밍 언어." 프렌티스 홀, 1988.
피드백
피드백 토스트를 클릭하여 이 도구에 대한 피드백을 시작하세요.
관련 도구
귀하의 작업 흐름에 유용할 수 있는 더 많은 도구를 발견하세요.