2016-11-01 3 views
0

는 C#으로 UTC 일부 현지 시간 변환 사용자 시간대.나는 이런 식으로 뭔가를 할 노력하고

저는이 정보를 서버로 보내고 있습니다. 서버 측에서이 작업을 수행하려고합니다.

날짜 및 시간 값을 가져 와서 시간대 값을 확인하십시오. 예를 들어 "UTC + 1"(또는 UTC 시간의 다른 + 값) 인 경우이를 저장하기 전에 UTC로 변환하십시오.

어떻게해야할지 모르겠다. 서버가이를 감지 할 수 있도록 어떤 값을 클라이언트에서 표준 시간대로 보내야합니까 (예 : UTC + 1).

는이 같은 사례보고 : ID로 시간대 무엇인지 찾는 방법에 대한

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 

을,하지만 난 이런 걸 할 수 없습니다 : 내가 얻을 수 있기 때문에

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("UTC+1"); 

을 물론 예외는 다음과 같습니다.

추가 정보 : 현지 시간대 에 'UTC + 1'시간대 ID가 없습니다. 퍼터.

누군가가 모든 UTC + -someNumber의 ID를 알고 있거나 다른 방법으로 UTC 문자열의 표준 시간대를 감지하는 방법이 있습니까?

누군가 이런 경험을 했나요?

+0

당신은 얻을 수 있습니다 * 정보가 로컬 시스템에 사용할 수있는 대한 모든 시간대 *에 의해 'TimeZoneInfo.GetSystemTimeZones()'를 호출하고'BaseUtcOffset'을 확인하십시오. 게다가 클라이언트 측에서 서버로 보내기 전에 UTC 시간을 계산하는 것이 더 간단 할 수도 있습니다. – Clemens

답변

1

시간대를 사용하는 유일한 방법은 OS에서 사용할 수있는 전체 이름을 기억하는 것입니다.

비슷한 질문이 here입니다.

MSDN 목록은 here입니다.

그래서 프레임 워크에서 지원하는 매핑을 만들지 않는 한 "UTC + 1"과 같은 문자열을 쉽게 변환 할 수없는 것처럼 보입니다.

DateTime utcTime = DateTime.UtcNow; 
TimeZoneInfo targetTimeZone = TimeZoneInfo.CreateCustomTimeZone("MyId", TimeSpan.FromHours(1), "Somewhere", "Somewhere"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(utcTime, targetTimeZone); 

하거나 DateTimeOffset, 또는 DateTime.AddHours(1)을 사용할 수 있습니다 :

0

당신은 TimeZoneInfo.CreateCustomTimeZone() 사용할 수

var datetimeOffset = new DateTimeOffset(yourDateTime, TimeSpan.FromHours(1)); 
var otherDatetime = yourDateTime.AddHours(1); 
관련 문제