밀리 초 정밀도로 실제 시간의 타임 스탬프를 정확히 어떻게 구성 할 수 있습니까?
16.4.2013 9 : 48 : 00 : 123과 같은 것이 필요합니다. 이게 가능해? 초당 10 번 값을 샘플링하는 응용 프로그램이 있으며 그래프로 표시해야합니다.
답변
밀리 초 정밀도로 실제 시간의 타임 스탬프를 정확히 어떻게 구성 할 수 있습니까?
나는 당신이 밀리 초의 정확성 을 의미한다고 생각합니다 . DateTime
정밀도는 높지만 정확도 측면에서는 상당히 굵습니다. 일반적으로 말하면 할 수 없습니다. 일반적으로 시스템 클럭 ( DateTime.Now
데이터를 가져 오는 위치 )의 해상도는 약 10-15ms입니다. 자세한 내용 은 정확성과 정확성 에 대한 Eric Lippert의 블로그 게시물 을 참조하십시오.
이보다 정확한 타이밍이 필요한 경우 NTP 클라이언트를 사용하는 것이 좋습니다.
그러나 여기에 밀리 초 정확도가 실제로 필요한지는 확실하지 않습니다. 정확한 타이밍에 신경 쓰지 않는다면 “정확하게”정확한 정확도로 샘플을 올바른 순서로 보여 주기만하면 시스템 시계가 양호해야합니다. 일광 절약 전환 등과 같은 시간대 문제를 피하기 위해 DateTime.UtcNow
오히려 오히려 사용하는 것이 좋습니다 DateTime.Now
.
귀하의 질문이 실제로DateTime
밀리 초 정밀도의 문자열로 변환하는 것과 관련 이 있다면 다음 을 사용하는 것이 좋습니다.
string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
CultureInfo.InvariantCulture);
(샘플과 달리이 방법은 정렬 가능하며 “월 / 일 / 년”또는 “일 / 월 / 년”인지 여부에 대해 혼동을 일으킬 가능성이 적습니다.)
답변
이것은 작동해야합니다 :
DateTime.Now.ToString("hh.mm.ss.ffffff");
표시 할 필요가없고 시차를 알아야 할 경우 문자열로 변환하지 마십시오. 그대로 두십시오.DateTime.Now();
그리고 TimeSpan
시간 간격의 차이를 아는 데 사용 하십시오.
예
DateTime start;
TimeSpan time;
start = DateTime.Now;
//Do something here
time = DateTime.Now - start;
label1.Text = String.Format("{0}.{1}", time.Seconds, time.Milliseconds.ToString().PadLeft(3, '0'));
답변
나는이 스레드에서 제안 된 것을 기반으로 비슷한 솔루션을 찾고 있었고 다음을 사용하며
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff")
매력처럼 작동합니다. 참고 : .fff
캡처하려는 정밀도 숫자입니다.
답변
밀리 초와 함께 DateTime 구조를 사용하고 다음과 같은 형식을 사용하십시오.
string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
CultureInfo.InvariantCulture);
timestamp = timestamp.Replace("-", ".");
답변
파이 로맨 서의 대답 은 나에게 꽤 좋아 보이지만 아마도 당신은 원했을 것입니다.
DateTime.Now.Millisecond
그러나 날짜를 비교하는 경우 TimeSpan을 사용하는 것이 좋습니다.
답변
다른 답변과 같은 문자열 대신 날짜를 원한다면이 확장 방법을 추가하십시오.
public static DateTime ToMillisecondPrecision(this DateTime d) {
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute,
d.Second, d.Millisecond, d.Kind);
}
답변
내가 질문을 이해하는 한, 당신은 갈 수 있습니다 :
DateTime dateTime = DateTime.Now;
DateTime dateTimeInMilliseconds = dateTime.AddTicks(-1 * dateTime.Ticks % 10000);
이렇게하면 1 밀리 초보다 작은 틱이 차단됩니다.