2010-07-10 3 views
3

일광 절약 시간제가 적용된 시간대 및 반환 시간을 찾으려고합니다.어떻게 일광 절약 시간제가 적용된 시간대 및 반환 시간을 찾으십니까?

Currenty 나는 할 수 있습니다

  1. 가져 오기 UTC 결정 시간대 DaylightSavingTime를 사용하는 경우
  2. 에 따라 현지 시간을 계산 오프셋
  3. 시간대를 찾을 수
  4. 규칙을 얻을 DaylightSavingTime에 대해
  5. 현재 시간이 DaylightSavingTime을 사용하는지 확인
  6. 이다의 참고하시기 바랍니다

    System.DateTime.Now.ToUniversalTime().Add(timeDiffUtcClient) 반환 = 2010/07/10 09:25:45 AM

    DateTime localDate = System.DateTime.Now.ToUniversalTime(); 
    // Get the venue time zone info 
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
    TimeSpan timeDiffUtcClient = tz.BaseUtcOffset; 
    localDate = System.DateTime.Now.ToUniversalTime().Add(timeDiffUtcClient); 
    
    
    if (tz.SupportsDaylightSavingTime && tz.IsDaylightSavingTime(localDate)) 
    { 
        localDate = localDate.Subtract(tz.GetAdjustmentRules().Single(r => localDate >= r.DateStart && localDate <= r.DateEnd).DaylightDelta); 
    } 
    DateTimeOffset utcDate = localDate.ToUniversalTime(); 
    
    
    return localDate; 
    

    최종 값 LOCALDATE : 나는 규칙을 적용하는 데 문제가 있어요 그러나

, 여기에 코드입니다 {2010/07/10 08:20:40 AM}

그것은 해야 {2010/07/10 오전 9시 20분 40초}

이 1 시간은 어떤 이유로 꺼져합니다.

public static DateTime GetLocalTime(string TimeZoneName) 
    { 
     DateTime localDate = System.DateTime.Now.ToUniversalTime(); 

     // Get the venue time zone info 
     TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName); 
     TimeSpan timeDiffUtcClient = tz.BaseUtcOffset; 
     localDate = System.DateTime.Now.ToUniversalTime().Add(timeDiffUtcClient); 
     //DateTimeOffset localDate = new DateTimeOffset(venueTime, tz.BaseUtcOffset); 

     if (tz.SupportsDaylightSavingTime && tz.IsDaylightSavingTime(localDate)) 
     { 
      TimeZoneInfo.AdjustmentRule[] rules = tz.GetAdjustmentRules(); 
      foreach (var adjustmentRule in rules) 
      { 
       if (adjustmentRule.DateStart <= localDate && adjustmentRule.DateEnd >= localDate) 
       { 
        localDate = localDate.Add(adjustmentRule.DaylightDelta); 
       } 
      } 
      //localDate = localDate.Subtract(tz.GetAdjustmentRules().Single(r => localDate >= r.DateStart && localDate <= r.DateEnd).DaylightDelta); 
     } 
     DateTimeOffset utcDate = localDate.ToUniversalTime(); 


     return localDate; 
    } 

당신이 할 수있는 테스트하려면 :

+1

관련 게시물 : : http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices 전체 기능에 의해 대체 될 수 없습니다 – Oded

답변

2

좋아, 나는 그것을 고정 끝에

Hashtable list = new Hashtable(); 
     foreach (TimeZoneInfo tzi in TimeZoneInfo.GetSystemTimeZones()) 
     { 
      string name = tzi.DisplayName; 
      DateTime localtime = TimeZoneHelper.GetLocalTime(tzi.Id); 
      list.Add(name, localtime); 
     } 

다음 "목록"에 간략한을하고 worldtimeserver.com로 이동을하고 몇 도시를 확인하십시오.

3

나는 여기에 조금 늦게 뛰어 들고 있지만, 왜 수동으로이 모든 작업을하는지 확신 할 수 없다.

public static DateTime GetLocalTime(string TimeZoneName) 
{ 
    return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)); 
} 
관련 문제