C# 유닉스 타임스탬프(Unix Timestamp)와 DateTime 간의 변환 방법


프로그램을 개발하다 보면 유닉스 타임스탬프(Unix Timestamp)를 DateTime으로 변환하거나 반대로 DateTime을 Unix Timestamp로 변환해야 할 경우가 있습니다.

유닉스 시간(Unix Time)은 1970년 1월 1일 00:00:00 협정 세계시(UTC) 부터의 경과 시간을 초로 환산하여 정수로 나타낸다. 유닉스 시간에서 윤초는 무시되며 유닉스 계열 운영 체제나 여러 다른 운영 체제, 그리고 파일 형식들에서 사용된다.(출처: 위키백과)

최근 프로그램에서는 유닉스 타임스탬프(Unix Timestamp)를 사용하는 경우가 그리 많지 않습니다. 하지만 예전에 개발한 프로그램을 수정(Modify)하거나 업그레이드(Upgrade) 작업을 하는 경우 기존의 Unix Timestamp를 처리하는 방법을 알고 있어야 합니다.

이번 글에서는 C# 유닉스 타임스탬프(Unix Timestamp)와 DateTime 간의 변환 방법에 대해 알아보겠습니다.

C# 유닉스 타임스탬프(Unix Timestamp)와 DateTime 간의 변환 방법

C#에서 유닉스 타임스탬프와 DateTime 간 변환 예제

▼ 아래 C# 코드는 UnixTimestamp를 DateTime으로 변환하거나 DateTime을 UnitTimestamp로 변환하는 예제 입니다.

 
// 오늘이 2022-06-13인 경우
double unixtimestamp =  ConvertToUnixTimestamp(DateTime.Now.ToString(“yyyy-MM-dd”));
// 리턴값 unixtimestamp = 1655046000
 
// 유닉스 타임스탬프 값이 ‘1655249146’ 경우
DateTime datetime = ConvertFromUnixTimestamp(1655249146);
// 리턴값 datetime = 2022-06-15 오전 8:25:46
 
 
// 유닉스 타임스탬프를 DateTime으로 변환
private DateTime ConvertFromUnixTimestamp(double timestamp)
{
    DateTime origin = new DateTime(1970110000);
    return origin.AddSeconds(timestamp).AddHours(9);  //TimeZone 고려 GMT+09:00 더해줌
}
 
// DateTime을 유닉스 타임스탬프로 변환
private double ConvertToUnixTimestamp(string sdate)
{
    DateTime date = DateTime.Parse(sdate).AddHours(9); //TimeZone 고려 GMT+09:00 
    DateTime origin = new DateTime(1970110000);
    TimeSpan diff = date  origin;
    return Math.Floor(diff.TotalSeconds);
}
 

UNIX Time에 대해 좀 더 알아보기

UNIX Time은 UNIX 운영체제를 개발한 벨 연구소에서 처음 정의한 개념입니다.

UNIX Time을 Epoch time 또는 POSIX time이라고 부르기도 합니다.

부호가 있는 32비트 정수로 표현하다 보니 1970.1.1 이후 경과한 초를 누적 하다 보면 2038.1.19 03:14:07이 넘어가면 정수의 오버플로우(Overflow)가 발생하게 됩니다. 이를 경우 부호가 음수로 변해 1901.12.13 20:45:52로 변환 될 수 있는 문제점이 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기