2013-02-04 4 views
0

컴퓨터에서 (시뮬레이터에서 테스트 할 때) 또는 전화에서 (전화에서 직접 테스트 할 때) 시간대를 변경하면 DateTime.ToLocalTime()은 업데이트 된 결과를 반환하지 않습니다. .표준 시간대가 변경되면 MonoTouch DateTime.ToLocalTime이 업데이트되지 않음

나는 UIApplication.Notifications.ObserveSignificantTimeChange에 대한 알림 이벤트를 등록하고 성공적으로 수신합니다. 그것에서 나는 TimeZoneInfo.ClearCachedData()라고 부르며 실제로 시간대가 변경되었음을 감지 할 수있게하지만 이것은 ToLocalTime()에 영향을 미치지 않습니다. DateTime 내가 변환 중입니다. Utc (예 : DateTime.UtcNow 시도)입니다.

이 질문에 제안 된대로 CultureInfo.CurrentCulture.ClearCachedData()을 호출 해 보았습니다. SetTimeZoneInformation does not update DateTime.Now for another .NET Application. CurrentCulture이 Null로되면 응용 프로그램이 충돌 만 발생합니다.

ToLocalTime()의 구현을 조금 더 자세히 살펴보면 객체 TimeZone.CurrentTimeZone을 사용하는 것으로 보입니다. 이 개체는 DateTime.GetNow()TimeZone.timezone_check의 차이 일 때만 다시 설정됩니다. TimeZoneInfo.ClearCachedData()을 호출하면 TimeZone.timezone_check이 업데이트되지 않는 것으로 판단됩니다.

ToLocalTime()에 시간대 변경을 고려하도록 할 수있는 방법이 있습니까?

답변

2

DateTimeOffset을 사용할 수 있습니다. this question을 참조하십시오. 내가 거기에 TimeZone, 어떤 캐시를 지우지 않고 변경할 때마다 내 formattedLocalTime 변경 내 휴대 전화에

var dateTimeUtc = new System.DateTime(2013, 2, 4, 21, 30, 0, 
             System.DateTimeKind.Utc); 
var dateTimeOffsetLocal = new System.DateTimeOffset(dateTimeUtc.ToLocalTime()); 
var formattedLocalTime = string.Format("{0:HH:mm}", dateTimeOffsetLocal); 

: -

편집 내가 작업을하는 것은 이것이다. 보기를 다시로드해야하지만 다른 트릭은 없습니다.

var localTimeZone = System.TimeZoneInfo.Local.StandardName; 

나는이 어떻게 든 올바른 방향을 제시해 주었으면한다 :

로컬 TimeZone 내가 사용 확인/표시합니다. 나는이 "내 기계에서 일하는 것"보다 더 좋은 것이 없다.

+0

좋은 제안이지만 같은 문제가 발생합니다. 'DateTimeOffset.ToLocalTime()'을 호출해도 여전히 업데이트되지 않는'TimeZone.CurrentTimeZone'을 사용합니다. – ysalmi

+0

나는 내 자신의 구현을 조사해야 할 것이다. 이것은 나를 위해 일하고있다. 후프로 돌아 가라. – Jacco

+0

도움 주셔서 감사합니다. 나는 뭔가를 놓친 것 같은 기분이야. 최신 TimeZoneInfo를 사용하는'TimeZoneInfo.ConvertTimeFromUtc (myUTCDate, TimeZoneInfo.Local)'을 시도했지만 결과를 출력 할 때 여전히 잘못된 현지 시간을 얻고 있습니다. – ysalmi

관련 문제