Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 유닉스 타임스탬프를 구하는 3가지 방법

유닉스(Unix) 타임스탬프는 주로 유닉스 계열 운영체제에서 사용되지만, 전 세계 모든 시간대의 시간을 하나의 기준으로 표현할 수 있어 어떤 운영체제에서도 유용하게 활용됩니다.

유닉스 타임스탬프는 시간을 초 단위로 나타냅니다. 유닉스 에포크(Unix Epoch)는 1970년 1월 1일 00:00:00 UTC부터 시작되며, 이 시점을 기준으로 경과한 시간을 초로 환산한 값입니다.

즉, 유닉스 타임스탬프란 에포크라는 기준 시점과 특정 날짜 사이의 경과 시간을 초 단위 숫자로 표현한 것입니다.

방법 1: DateTime.Now.Subtract().TotalSeconds 사용

현재 시각에서 에포크 시간(1970년 1월 1일)을 빼고, 그 결과를 초 단위로 변환하는 가장 직관적인 방식입니다.

class Program{
    static void Main(string[] args){
        Int32 unixTimestamp = (Int32)(DateTime.Now.Subtract(new
        DateTime(1970, 1, 1))).TotalSeconds;
        Console.WriteLine("The Unix Timestamp is {0}", unixTimestamp);
        Console.ReadLine();
    }
}

출력 결과

1596837896

방법 2: DateTimeOffset.Now.ToUnixTimeSeconds() 사용

.NET Framework 4.6 이상에서 제공되는 내장 메서드로, 코드가 가장 간결하고 공식적으로 권장되는 방법입니다. 한 줄만으로 유닉스 타임스탬프를 손쉽게 구할 수 있습니다.

class Program{
    static void Main(string[] args){
        var unixTimestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
        Console.WriteLine("The Unix Timestamp is {0}.", unixTimestamp);
        Console.ReadLine();
    }
}

출력 결과

1596819230

방법 3: TimeSpan 구조체 활용

DateTime 객체의 Ticks 값을 TimeSpan으로 변환한 뒤, 현재 시각과 에포크 시각의 차이를 계산하여 유닉스 타임스탬프를 구하는 방법입니다.

class Program{
    static void Main(string[] args){
        TimeSpan epochTicks = new TimeSpan(new DateTime(1970, 1, 1).Ticks);
        TimeSpan unixTicks = new TimeSpan(DateTime.Now.Ticks) - epochTicks;
        Int32 unixTimestamp = (Int32)unixTicks.TotalSeconds;
        Console.WriteLine("The Unix Timestamp is {0}.", unixTimestamp);
        Console.ReadLine();
    }
}

출력 결과

1596839083

마무리

세 가지 방법 모두 동일한 결과를 얻을 수 있지만, .NET Framework 4.6 이상 환경이라면 DateTimeOffset.Now.ToUnixTimeSeconds()를 사용하는 것이 가장 간결하고 안전합니다. 참고로 Int32로 캐스팅할 경우 2038년 문제가 발생할 수 있으므로, 장기적으로는 long(Int64) 타입을 사용하는 것이 좋습니다.