[c#] 밀리 초 단위의 DateTime 표현?

1970 년 이후 밀리 초 단위의 시간 표시로 변환해야하는 SQL 서버 타임 스탬프가 있습니다. 일반 SQL로이 작업을 수행 할 수 있습니까? 그렇지 않은 경우 DateTimeC # 의 변수 로 추출했습니다 . 이것의 millisec 표현을 얻을 수 있습니까?

고마워,
Teja.



답변

아마도 UTC에있는 UNIX와 유사한 타임 스탬프로 변환하려고 할 것입니다.

yourDateTime.ToUniversalTime().Subtract(
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    ).TotalMilliseconds

UTC에는 이러한 문제가 없으므로 여름철 문제도 방지됩니다.


답변

C #에서는 다음과 같이 작성할 수 있습니다.

(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds


답변

.NET 4.6부터는 DateTimeOffset객체를 사용 하여 유닉스 밀리 초를 가져올 수 있습니다 . DateTime객체를 받는 생성자가 있으므로 아래에 설명 된대로 객체를 전달할 수 있습니다.

DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();

다른 답변에서 언급했듯이 yourDateTime올바른 Kind지정 이 있는지 확인 하거나 .ToUniversalTime()먼저 UTC 시간으로 변환하는 데 사용 하십시오 .

여기에서에 대해 자세히 알아볼 수 있습니다 DateTimeOffset.


답변

SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000

이것은 완전한 정밀도를 제공하지는 않지만 DATEDIFF(MS...오버플로를 유발합니다. 초가 충분하다면이 작업을 수행해야합니다.


답변

unixtimestampmillis C #에 대한 은밀한 datetime에 대한이 다른 솔루션입니다.

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static long GetCurrentUnixTimestampMillis()
{
    DateTime localDateTime, univDateTime;
    localDateTime = DateTime.Now;
    univDateTime = localDateTime.ToUniversalTime();
    return (long)(univDateTime - UnixEpoch).TotalMilliseconds;
}


답변

Andoma의 대답을 사용하여 이것이 내가하는 일입니다.

이와 같은 Struct 또는 Class를 만들 수 있습니다.

struct Date
    {
        public static double GetTime(DateTime dateTime)
        {
            return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
        }

        public static DateTime DateTimeParse(double milliseconds)
        {
            return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime();
        }

    }

그리고 다음과 같이 코드에서 이것을 사용할 수 있습니다.

DateTime dateTime = DateTime.Now;

double total = Date.GetTime(dateTime);

dateTime = Date.DateTimeParse(total);

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


답변

DateTimeExtensions 클래스 에는 ToUnixTime()ToUnixTimeMs()메서드 가 있습니다.

DateTime.UtcNow.ToUnixTimeMs()