유닉스(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) 타입을 사용하는 것이 좋습니다.