2012-02-16 2 views
2

프로젝트의 경과 시간을 계산하려고합니다.
예를 들어 ,
시작 시간은 06 11 월 2011 오전 1시 59분 58초
종료 시간은 06 11 월 2011입니다 오전 1시 0분 0초
실제 경과 시간 0시 0분 2초
입니다 하지만 경과 시간을 얻는 것은 -00 : 59 : 58입니다 (일광 절약 시간제로 인해 시계가 1 시간 뒤로 이동했습니다)
일광 절약 시간 동안 올바른 경과 시간으로 더 정확하게 계산하려면 어떻게해야합니까?C#에서 경과 시간을 계산하는 동안 일광 절약 문제가 발생했습니다.

코드 :

DateTime startDttm = DateTime.Parse("Nov 06, 2011 01:59:58 AM"); 
DateTime endDttm = DateTime.Parse("Nov 06, 2011 01:00:00 AM"); 
TimeSpan elapsedTime = endDttm.Subtract(startDttm); 
Console.WriteLine("Elapsed Time - " + elapsedTime); 
+0

먼저 유닉스 타임 스탬프로 변환 한 다음 계산하십시오. –

+0

Noda time API를 확인하십시오. http://noda-time.blogspot.in/ –

+0

시도 UTC로 변환, startDttm.ToUniversalTime(); end.ToUniversalTime(); 그런 다음 Subtract()를 시도하여 같은 결과를 얻습니다. – Vinoth

답변

0

사용하여 타임 스탬프를 저장하는 범용 표준시. 협정 세계시에서 두 개의 타임 스탬프를 비교할 때마다 정확한 차이가납니다.

C#에서는 DateTime dt = DateTime.UtcNow을 사용하여 해당 형식의 현재 타임 스탬프를 얻습니다.

도 참조하십시오. http://en.wikipedia.org/wiki/Coordinated_Universal_Time.

6

값이 기본적으로 모호합니다. 두 시간 모두 번 두 번 시간이 2시에 돌아간 것으로 가정합니다.

는 당신이 이전 옵션으로 시작 시간을 처리 할 것인지 알고 있다면, 그리고 나중에 옵션과 종료 시간, 당신은 Noda Time를 사용할 수 있습니다

이상적인 세계에서는
using System; 
using NodaTime; 
using NodaTime.Text; 

public class Test 
{ 
    static void Main(string[] args) 
    { 
     var pattern = LocalDateTimePattern.CreateWithInvariantInfo 
       ("MMM dd, yyyy HH:mm:ss tt"); 
     LocalDateTime start = pattern.Parse("Nov 06, 2011 01:59:58 AM").Value; 
     LocalDateTime end = pattern.Parse("Nov 06, 2011 01:00:00 AM").Value; 

     DateTimeZone zone = DateTimeZone.ForId("America/Chicago"); 

     // Where this is ambiguous, pick the earlier option 
     ZonedDateTime zonedStart = zone.AtEarlier(start); 

     // Where this is ambiguous, pick the later option 
     ZonedDateTime zonedEnd = zone.AtLater(end); 

     Duration duration = zonedEnd.ToInstant() - zonedStart.ToInstant(); 

     // Prints 00:00:02 
     Console.WriteLine(duration.ToTimeSpan()); 
    }   
} 

, 그러나 모호한 현지 시간을 파싱 할 필요가 없으며 이전 또는 이후에있을 예정인지 여부를 추측 할 필요가 없습니다. 여기서 컨텍스트가 무엇입니까?

모두 가능한 경우 일 경우 현지 날짜/시간 대신 UTC 날짜/시간을 기록하도록 데이터 소스를 변경하십시오. 예를 들어 더 파싱하기 쉬운 형식으로 저장하는 것이 이상적입니다. yyyy-MM-ddTHH : mm : ss

+0

존, 구역을 원하지 않아요. 뒷모습 (끝)? –

+0

@IanHorwill : 죄송합니다, 예 :) 이제 경과 시간은 요청한대로입니다. 이 대답을 쓸 때 나는 잠 들어 있었음에 틀림 없다 - 사과! –

관련 문제