developer tip

1970 년 이후 DateTime을 초 단위로 변환하려면 어떻게해야합니까?

optionbox 2020. 7. 28. 08:27
반응형

1970 년 이후 DateTime을 초 단위로 변환하려면 어떻게해야합니까?


C # DateTime 변수를 Unix 시간, 즉 1970 년 1 월 1 일 이후의 초 수로 변환하려고합니다. DateTime이 실제로 0001 년 1 월 1 일 이후의 '틱'수로 구현 된 것처럼 보입니다.

내 현재 생각은 1970 년 1 월 1 일 내 DateTime에서 다음과 같이 빼는 것입니다.

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;

더 좋은 방법이 있습니까?


기본적으로 그렇습니다. 유닉스 시대와의 변환을 위해 사용하는 방법은 다음과 같습니다.

public static DateTime ConvertFromUnixTimestamp(double timestamp)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    return origin.AddSeconds(timestamp);
}

public static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    TimeSpan diff = date.ToUniversalTime() - origin;
    return Math.Floor(diff.TotalSeconds);
}

DateTime 대신 DateTimeOffset으로 나머지 시스템이 정상이면 정말 편리한 기능이 있습니다.

long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();

내가 볼 수있는 유일한 방법은 자정 1970년 1월 1일부터해야하는데 있다는 것이다 UTC

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc));
return span.TotalSeconds;

시간대 문제를 피하기 위해 DateTime.UtcNow를 사용하고 싶을 것입니다.

TimeSpan span= DateTime.UtcNow.Subtract(new DateTime(1970,1,1,0,0,0)); 

해당 날짜-시간이 UTC로되어 있거나 일광 절약 시간을 준수하지 않은 지역의 현지 시간을 나타내는 경우이 방법이 좋습니다. DateTime 차이 루틴은 일광 절약 시간제를 고려하지 않으므로 결과적으로 6 월 1 일 자정이 1 월 1 일 자정 이후 24 시간의 배수로 간주됩니다. 로케일로 인해 가장 최근의 일광 절약 규칙을 변경하기 전에 시간을 올바르게 처리 할 수있는 좋은 방법이 없다고 생각합니다.


DateTime의 startTime 및 endTime을 작성한 다음 endTime.Subtract (startTime)을 수행 할 수 있습니다. 그런 다음 span.Seconds를 출력하십시오.

나는 그것이 작동해야한다고 생각합니다.

참고 URL : https://stackoverflow.com/questions/3354893/how-can-i-convert-a-datetime-to-the-number-of-seconds-since-1970

반응형