데이터베이스에서 나는 모든 날짜/시간을 UTC로 저장합니다..NET 시간대 이름으로 시간대 오프셋 가져 오기
사용자의 시간대 이름 (예 : 미국 동부 표준시)을 알고 있습니다.
올바른 시간을 표시하기 위해 사용자의 시간대 오프셋을 UTC 날짜/시간에 추가해야한다고 생각했습니다. 하지만 시간대 이름으로 시간대 오프셋을 어떻게 얻을 수 있습니까?
감사합니다!
데이터베이스에서 나는 모든 날짜/시간을 UTC로 저장합니다..NET 시간대 이름으로 시간대 오프셋 가져 오기
사용자의 시간대 이름 (예 : 미국 동부 표준시)을 알고 있습니다.
올바른 시간을 표시하기 위해 사용자의 시간대 오프셋을 UTC 날짜/시간에 추가해야한다고 생각했습니다. 하지만 시간대 이름으로 시간대 오프셋을 어떻게 얻을 수 있습니까?
감사합니다!
그런 다음 제공된 ID를 사용하여 TimeZoneInfo
객체와는 TimeZoneInfo.GetUtcOffset
얻을 TimeZoneInfo.FindSystemTimeZoneById
을 사용할 수 있습니다 : 당신이 변환 처리 할 TimeZoneInfo
의 ConvertTime
방법을 활용한다
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset(myDateTime);
GetSystemTimeZones() 메서드를 사용하면 서버에 구성된 모든 시간대 목록을 가져와 클라이언트의 시간대와 일치시킬 수 있습니다.
왜 "미국 동부 표준시"형식의 시간대가 있습니까? 그게 어디서 온거야?
좋은 생각, 지금 그것을 시도 할 것이다 : 나는 오히려 각'TimeZone' 객체의 아이디/문자열로 드롭 다운을 채우는 것보다 –
) (GetSystemTimeZones에 의해 반환 된 컬렉션 아래로 한 방울을 채우는거야 을 콜렉션, 드롭 다운에서'Item's로 실제 객체를 대신 추가하는 것이 어떻습니까? 그렇게하면, 드롭 다운이 바뀌면'(TimeZoneInfo) myDropDown.SelectedItem'을 사용하여 TimeZoneInfo 객체에 대한 참조를 잡을 수 있습니다. 그러면 매번'.FindSystemTimeZoneById'를 호출 할 필요가 없습니다. 목적. –
을하는 대신 일부 수동 추가하고 당신이 지정한 TimeZone에 기초한 당신의 날짜.
var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
훌륭한 조언. –
이것이 내 문제를 해결했습니다. 고맙습니다! –
이것은 나를 위해 작동하지 않습니다. 현재 "E. 오스트레일리아 표준시"영역에서 DST이므로 시간은 GMT + 11입니다. 그러나 이것을 실행할 때 나는 10 시간의 결과를 얻는다. 코드는 다음과 같습니다. TimeZoneInfo.FindSystemTimeZoneById ("호주 표준시") GetUtcOffset (Now.ToUniversalTime) .Hours. 내가 도대체 뭘 잘못하고있는 겁니까? –
@ ingredient_15939 - 아마도 잘못된 것은 아닙니다. 이 컴퓨터가 DST를 올바르게 사용하도록 설정되어 있는지 확인 했습니까? – Oded