밀리 초 단위로 시간을 가져야하는 프로그램을 만들고 있습니다. 시간이 지남에 따라, 나는 결코 자신과 같지 않은 숫자를 의미하며, 항상 2 초 전보다 1000 숫자가 더 큽니다. 나는 DateTime.Now
a 로 변환 TimeSpan
하고 TotalMilliseconds
그로부터 얻는 것을 시도했지만 ... 완전히 정확하지 않다고 들었습니다.
더 쉬운 방법이 있습니까?
밀리 초 단위로 시간을 가져야하는 프로그램을 만들고 있습니다. 시간이 지남에 따라, 나는 결코 자신과 같지 않은 숫자를 의미하며, 항상 2 초 전보다 1000 숫자가 더 큽니다. 나는 DateTime.Now
a 로 변환 TimeSpan
하고 TotalMilliseconds
그로부터 얻는 것을 시도했지만 ... 완전히 정확하지 않다고 들었습니다.
더 쉬운 방법이 있습니까?
답변:
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
이것은 실제로 다양한 유닉스 변환 방법이 DateTimeOffset
클래스 (.NET Framework 4.6+, .NET Standard 1.3+) 에서 구현되는 방법입니다 .
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
DateTime.Now
매우 자주 업데이트되지 않더라도 ) decimal milliseconds = DateTime.Now.Ticks / (decimal)TimeSpan.TicksPerMillisecond;
대신 사용하십시오.
long
밀리 초 앞에서 데이터 유형을 보았습니다 . int
확실히 오버플로를 사용 합니다.
이 DateTime.Ticks
속성은 날짜와 시간을 나타내는 눈금 수를 가져옵니다.
10,000 Ticks는 밀리 초 (초당 10,000,000 틱)입니다.
A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond.
나는 다음 수업을 사용합니다. 나는 인터넷에서 그것을 한 번 발견했는데, 지금 은 최고의 NOW () 이라고 가정했다 .
/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>Get extra long current timestamp</summary>
public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}
출처를 알 수 없습니다.
QueryPerformanceCounter
기본 방법을 시도해 볼 수 있습니다 . 자세한 내용은 http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html 을 참조하십시오. 이것이 Stopwatch
클래스가 사용하는 것입니다.
.NET / C #에서 틱 정밀도의 타임 스탬프를 얻는 방법을 참조하십시오 . 자세한 내용은.
Stopwatch.GetTimestamp()
이 방법에 대한 액세스를 제공합니다.
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
Stopwatch.GetTimestamp()
실제로 해당 방법에 대한 액세스를 제공합니다.
DateTime.Now.TimeOfDay.TotalMilliseconds (현재 날짜)를 사용했는데 도움이되기를 바랍니다.
사용하십시오 System.DateTime.Now.ToUniversalTime()
. 이렇게하면 판독 값이 알려진 기준 기반 밀리 초 형식으로 변경되어 일 변경 등을 완전히 제거 할 수 있습니다.