2010-06-05 6 views
24

데이터베이스에서 나는 모든 날짜/시간을 UTC로 저장합니다..NET 시간대 이름으로 시간대 오프셋 가져 오기

사용자의 시간대 이름 (예 : 미국 동부 표준시)을 알고 있습니다.

올바른 시간을 표시하기 위해 사용자의 시간대 오프셋을 UTC 날짜/시간에 추가해야한다고 생각했습니다. 하지만 시간대 이름으로 시간대 오프셋을 어떻게 얻을 수 있습니까?

감사합니다!

답변

37

그런 다음 제공된 ID를 사용하여 TimeZoneInfo 객체와는 TimeZoneInfo.GetUtcOffset 얻을 TimeZoneInfo.FindSystemTimeZoneById을 사용할 수 있습니다 : 당신이 변환 처리 할 TimeZoneInfoConvertTime 방법을 활용한다

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); 
TimeSpan offset = tzi.GetUtcOffset(myDateTime); 
+0

이것이 내 문제를 해결했습니다. 고맙습니다! –

+0

이것은 나를 위해 작동하지 않습니다. 현재 "E. 오스트레일리아 표준시"영역에서 DST이므로 시간은 GMT + 11입니다. 그러나 이것을 실행할 때 나는 10 시간의 결과를 얻는다. 코드는 다음과 같습니다. TimeZoneInfo.FindSystemTimeZoneById ("호주 표준시") GetUtcOffset (Now.ToUniversalTime) .Hours. 내가 도대체 ​​뭘 잘못하고있는 겁니까? –

+0

@ ingredient_15939 - 아마도 잘못된 것은 아닙니다. 이 컴퓨터가 DST를 올바르게 사용하도록 설정되어 있는지 확인 했습니까? – Oded

4

GetSystemTimeZones() 메서드를 사용하면 서버에 구성된 모든 시간대 목록을 가져와 클라이언트의 시간대와 일치시킬 수 있습니다.

왜 "미국 동부 표준시"형식의 시간대가 있습니까? 그게 어디서 온거야?

+0

좋은 생각, 지금 그것을 시도 할 것이다 : 나는 오히려 각'TimeZone' 객체의 아이디/문자열로 드롭 다운을 채우는 것보다 –

+0

) (GetSystemTimeZones에 의해 반환 된 컬렉션 아래로 한 방울을 채우는거야 을 콜렉션, 드롭 다운에서'Item's로 실제 객체를 대신 추가하는 것이 어떻습니까? 그렇게하면, 드롭 다운이 바뀌면'(TimeZoneInfo) myDropDown.SelectedItem'을 사용하여 TimeZoneInfo 객체에 대한 참조를 잡을 수 있습니다. 그러면 매번'.FindSystemTimeZoneById'를 호출 할 필요가 없습니다. 목적. –

2

을하는 대신 일부 수동 추가하고 당신이 지정한 TimeZone에 기초한 당신의 날짜.

var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo); 
+0

훌륭한 조언. –

관련 문제