2010-08-09 7 views
0

나는 응용 프로그램 내에서 발생하는 다양한 이벤트의 날짜를 표시하는 웹 응용 프로그램을 만들고 있습니다 (예 : 문서가 생성되는 경우). 물론, 표시되는 날짜는 사용자가있는 곳을 고려해야합니다 (저장된 날짜를 맹목적으로 출력하는 것이 아니라 서버 로컬 시간이기 때문에).UTC에서 사용자의 현지 시간으로

모든 표준 시간대를 나열하는 샘플 응용 프로그램을 만들었습니다. 선택한 표준 시간대에 저장된 UTC 날짜를 출력하고 표준 시간대가 DST를 준수하는 시간을 더할 수 있습니다.

내 질문은 : 이것은 최적의 접근 방법인가? 그리고/또는 모든 경우에이 방법으로는 작동하지 않는 것을 놓친 것입니까?

static void Main(string[] args) 
{ 
List<DateTime> events = new List<DateTime>(); 

events.Add(DateTime.UtcNow); 
events.Add(DateTime.UtcNow.AddDays(1)); 
events.Add(DateTime.UtcNow.AddDays(7)); 

    var timeZones = TimeZoneInfo.GetSystemTimeZones(); 

for (var i = 0; i < timeZones.Count; i++) 
{ 
    Console.WriteLine(i + " : " + timeZones[i].DisplayName); 
} 

var currentZone = timeZones[Convert.ToInt32(Console.ReadLine())]; 

Console.WriteLine("UTC Event: {0}", events[0]); 
Console.WriteLine("Local Event: {0}", correct(events[0], currentZone)); 

Console.ReadKey(); 
} 

static DateTime correct(DateTime date, TimeZoneInfo timeZone) 
{ 
var correctedDate = date.AddHours(timeZone.BaseUtcOffset.TotalHours); 

if (timeZone.IsDaylightSavingTime(date)) 
{ 
    return correctedDate.AddHours(1); 
} 

return correctedDate; 
} 

출력 결과에서 예상되는 결과를 얻고 있습니다. 난 단지 시간대의 복잡한 문제가 해결하기가 쉽지 않을 것이라고 우려하고 있습니다. 당신이 주변에 오프셋 자신 :) (특히, 현재 코드가 잘못되고있는, 정확히 한 시간의 DST 차이를 가정으로 엉망이 필요하지 않습니다 '-

답변

1

그것은 그 :)

사용 TimeZoneInfo.ConvertTimeFromUtc보다 훨씬 간단합니다 항상 맞습니다.)

을 사용하면 무언가가 UTC가 아닌 것처럼 생각할 필요가 없습니다.

+0

우수 감사합니다. 코드를 삭제하는 것보다 더 기쁘게하는 것은 없습니다 (특히 결함이있는 것). – Martin

관련 문제