1970 년 이후 밀리 초 단위의 시간 표시로 변환해야하는 SQL 서버 타임 스탬프가 있습니다. 일반 SQL로이 작업을 수행 할 수 있습니까? 그렇지 않은 경우 DateTime
C # 의 변수 로 추출했습니다 . 이것의 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()