1970 년 이후 밀리 초 단위의 시간 표시로 변환해야하는 SQL 서버 타임 스탬프가 있습니다. 일반 SQL로이 작업을 수행 할 수 있습니까? 그렇지 않은 경우 DateTime
C # 의 변수 로 추출했습니다 . 이것의 millisec 표현을 얻을 수 있습니까?
고마워,
Teja.
1970 년 이후 밀리 초 단위의 시간 표시로 변환해야하는 SQL 서버 타임 스탬프가 있습니다. 일반 SQL로이 작업을 수행 할 수 있습니까? 그렇지 않은 경우 DateTime
C # 의 변수 로 추출했습니다 . 이것의 millisec 표현을 얻을 수 있습니까?
고마워,
Teja.
답변:
아마도 UTC에있는 UNIX와 유사한 타임 스탬프로 변환하려고 할 것입니다.
yourDateTime.ToUniversalTime().Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
).TotalMilliseconds
UTC에는 이러한 문제가 없으므로 여름철 문제도 방지됩니다.
DateTime
있고 TimeSpan
전체 밀리 초보다 높은 정밀도로 값을 저장합니다. 0.79ms = 7900 틱. 정수가 필요한 경우 long ms = myTimeSpan.TotalTicks / 10000;
.
DateTime.UnixEpoch
에서는 날짜를 선언하는 대신 사용할 수 있습니다 .
DateTime
(계약의 메모를보세요 ToUniversalTime
)가 현지 시간으로되어 있지 않을 수 있다고 가정합니다 . 예를 들어 시간을 샘플링하는 것이 일반적 DateTime.UtcNow
이거나 다른 시간대에있을 수 있습니다.
C #에서는 다음과 같이 작성할 수 있습니다.
(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
long
대신에 캐스트를 제안합니다 int
:)
new DateTime(1970, 1, 1).AddMilliseconds(myDateAsALong);
다른 길로 가고 싶다면.
AddMilliseconds()
유형의 매개 변수가 필요합니다 double
. 암시 적 변환이이를 처리하지만 주목할 가치가 있습니다.
int.MaxValue
밀리 초 단위는 약 25 일입니다. 유용 할 것 같지 않습니다.
.NET 4.6부터는 DateTimeOffset
객체를 사용 하여 유닉스 밀리 초를 가져올 수 있습니다 . DateTime
객체를 받는 생성자가 있으므로 아래에 설명 된대로 객체를 전달할 수 있습니다.
DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
다른 답변에서 언급했듯이 yourDateTime
올바른 Kind
지정 이 있는지 확인 하거나 .ToUniversalTime()
먼저 UTC 시간으로 변환하는 데 사용 하십시오 .
여기에서에 대해 자세히 알아볼 수 있습니다 DateTimeOffset
.
.Now
이이 질문에 직접 적용되지 않습니다.
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);
도움이 되었기를 바랍니다.
(now - Epoch).TotalMilliseconds
여기서now
및Epoch
날짜 시간 개체입니다.