2016-06-30 23 views
0

내 코드에 매우 정확한 타임 스탬프가 필요합니다. 이 게시물의 최초의 솔루션 사용내 날짜 시간에 밀리 초를 표시하는 방법

How to get timestamp of tick precision in .NET/C#?

DateTime _starttime = DateTime.UtcNow; 
    Stopwatch _stopwatch = Stopwatch.StartNew(); 

그리고

DateTime highresDT = _starttime.AddTicks(_stopwatch.Elapsed.Ticks); 

로 나중에 전화를하지만 내가 가지고 MessageBox.Show(highresDT.ToString());

와 함께 표시 할 때 만 :

30/06/2016 14:59:06 

밀리 초로 표시하고 싶습니다. 그것은 가능합니까?! 고맙습니다.

저는 C#을 처음 접했을 때 저의 문제를 완전히 오해했을 가능성이 있습니다.

+1

이것은 "google it go"코멘트가 아니지만 정보가 너무 많아서 대답을 빨리 찾을 수없는 경우가 많습니다. 예를 들어 ".net show milliseconds"를 검색하면 맨 처음 결과는 답변과 동일한 것을 말하는 "방법 : 날짜 및 시간 값에 밀리 초 표시"라는 제목의 페이지입니다. 문서로 이동하는 것의 한 가지 이점은 찾고있는 답을 얻지 만 사용할 수있는 다른 것들을 발견 한 다음 필요할 때 나중에 기억한다는 것입니다. –

+0

예, 바보 같은 느낌이 듭니다. 솔루션은 스톱워치 "_stopwatch.Elapsed.TotalMilliseconds.ToString()"(시도했지만 작동하지 않았다 ..)와 같았고 Google에 코드를 적용 할 수있는 방법을 찾는 것이 어렵다고 생각했습니다. 어쨌든 당신을 감사하십시오 !! – jsls

답변

4

당신은 MessageBox.Show(highresDT.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));

1

이 설명서 (Custom Date and Time Format Strings)는 참조 용으로 유용합니다. 원하는 요소를 정확하게 표시하는 형식 문자열을 생성 할 수 있습니다. 예 :

MessageBox.Show (highDT.ToString ("dd/MM/yyyy HH : mm : ss fff")));

fff은 형식화 된 문자열에 밀리 초가 포함되어야 함을 나타냅니다. (값이 0 인 경우 'FFF` (밀리 초)을 생략합니다.)

2

이 코드는 당신이 생각했던 방식으로 작동하지 않습니다

DateTime _starttime = DateTime.UtcNow; 
Stopwatch _stopwatch = Stopwatch.StartNew(); 

는 기껏해야, 당신의 정확도는 10 ~ 15 밀리됩니다.

이유는 UtcNow가 스레드 퀀텀 당 한 번만 업데이트된다는 것입니다. 멀티 코어 컴퓨터의 Windows에서 스레드 퀀텀은 15ms입니다. 단일 코어 머신은 매 10ms마다.

스톱워치는 매우 정확하고 매우 정밀하므로 더 잘 수행 할 수 있습니다. 나는 예제를 통해 설명 할 것이다.

어쨌든 1 미터 정밀도와 정확도를 얻을 수있는 실제 스톱워치가있는 경우 시간과 분만 표시하는 알람 시계를 사용해도 좋을까요?

하실 수 있습니다. 스톱워치를 사용하여 시간의 경과를 매우 정확하게 측정 할 수 있습니다. 오전 11시 14 분부터 오전 11시 15 분까지는 알람 시계를 시청할 수 있습니다.예를 들어

, 당신은 다음과 같은 이벤트 세트 관찰 할 경우 :

  • 읽기 스톱워치 : 12000 MS
  • 읽기 클럭 : 오전 11시 14분
  • 읽기 시계 : 오전 11시 15분
  • 스톱 워치 읽기 : 12002 ms

중간에 어딘가에 있다는 것을 알면 시간은 정확히 11 : 15 : 00.0000입니다. 당신의 스톱워치가 그렇게 말했기 때문에 단지 2 밀리 세컨드의 시간 범위 내에서.

그래서 지금 당신은 알고 스톱워치 값 12001 +/- 1 밀리 == 11 : 15 : 00.000000

당신은 DateTime.UtcNow()와 스톱워치이 같은 개념을 적용 할 수 있습니다.

초시계를 읽고 utcnow를 반복적으로 읽었을 때 UtcNow 눈금이 11 : 14 : 31.030에서 11 : 14 : 31.045로 넘어 간다면 그 곳의 시간은 정확히 31.04500000임을 알 수 있습니다. 스톱워치는 실제 시간이 실제로 얼마나 경과했는지 알려주므로 오류가 얼마나 많은지 알 수 있습니다.

+0

내가 링크 된 게시물을 읽었습니까?! (전혀 의문의 여지가 없습니다 !!!) 그 답변을 준 사람은이 "기법"이 UtcNow의 스레드 퀀텀의 부정확성을 피하는 방법이라고 말했기 때문입니다. Personnaly 나는 당신이 누군지 말할 수 없다. (컴퓨터 세상에 너무 새로운) 하지만 나는 당신이 말하는 것을 얻는다. 그러나 그것은 나의 코드에 그것을 구현하는 것은 꽤 복잡하다. (그것은 이미 루프이고 나는 그것을 빨리해야한다. 매우 빠르고 정확하며 정확합니다.) 나는 그것을 시험해 볼 것이다 :) – jsls

+0

@jsls - 그 남자는 틀렸다. 먼저, UtcNow는 15 밀리 초 동안 동일한 값을 반환하고 Stopwatch (HighPerformanceCounter API를 통해)는 최신 값을 반환합니다. 그 바로 바로 거기에 오류가 있습니다. 왜 당신이 더 정확한 것을 원한다면, 내가 기술 한 것을 할 필요가 있습니다. 둘째, 스레드 타이밍 : OS는 수요와 스케줄링에 따라 CPU에서 스레드를 끊임없이 교환합니다. 'DateTime.UtcNow'를 호출 한 후'Stopwatch.StartNew()'를 호출하기 전에 스레드를 CPU에서 제거 할 수 있습니다. 당신은 당신의 실수를 측정하지 않습니다. – antiduh

관련 문제