2017-01-20 6 views
0

나는 위의 문자열에서 07:00 산 시간을 추출하고 어떤 날짜를 포맷 할 수있는 방법을 문자열 형식캡처 문자열에서 UTC 시간과 모든 날짜 시간 형식

string utcdt = "2017-01-01T15:48:00-07:00"; 

에 반환 된 날짜가 이 지역 서식?

컴퓨터의 시간대를 변경하고 싶지 않습니다. 변수 utcdt에 대한 UTC 시간이 달라질 수 있으며 내 WinForm 앱에서 사용되는 다른 모든 날짜는 동일한 표준 시간대 사양을 준수해야합니다.

나는 페덱스의 API를 사용하고 이것이

string utcdt = "2017-01-01T15:48:00-07:00"; 

이제 날짜 returnerd의 한 형식입니다
편집 나중에 응용 프로그램에서 데이터를 반환

foreach (TrackingDateOrTimestamp timestamp in trackDetail.DatesOrTimes) 
    Console.WriteLine("{0}: {1}", timestamp.Type, timestamp.DateOrTimestamp); 

있다 나의 현지 시간 - 의미

01/01/2017 17:48:00 

날짜를 일관되게 유지할 수있는 솔루션을 찾으려고합니다.

+1

시간대가 없습니다. 오프셋이 있습니다. 아마 여름에는 -7이 아닌 -6의 오프셋을 사용하여 포맷해야 할 것입니다. 실제로, 단일 오프셋을 알기보다는 사용자가보고 싶은 시간대를 알아 내려고 노력해야합니다. –

+0

@ 존 키스 - 너 잃어 버렸어 ... 나는 상쇄 됐어? – NadineSmithJonesPicard

+0

예, 그게 "-07 : 00"입니다. 현지 시간은 UTC보다 7 시간 늦었다 고 말하는 것은 UTC 오프셋입니다. 당신은 당신의 문자열에서 "Mountain Time"을 가지고 있지 않습니다. –

답변

1

DateTimeOffset 클래스를 사용하면 문자열을 현지 시간으로 구문 분석 할 수 있으며 UTC에서 오프셋됩니다. 그런 다음 오프셋을 TimeSpan으로 저장할 수 있습니다.

나중에이 같은 오프셋 (offset)를 사용할 필요가 또 다른 DateTime을 변환 할 DateTimeOffset 클래스를 사용하여 다음에 :

string dto = "2017-01-01T15:48:00-07:00"; 

DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(dto); 

DateTime utcDateTime = dateTimeOffset.UtcDateTime; 
TimeSpan timezoneOffset = dateTimeOffset.Offset; 


MessageBox.Show("UTC DateTime: " + utcDateTime); 
MessageBox.Show("Offset: " + timezoneOffset); 

DateTimeOffset nowWithOffset = DateTimeOffset.UtcNow.ToOffset(timezoneOffset); 

MessageBox.Show("Now in other timezone: " + nowWithOffset.ToString("O")); 

주 다른 주석이 무엇을 쓸 :이 제대로 일광 절약 시간을 처리하지 않습니다 . 이를 처리하기 위해서는 실제로 실제 시간대를 알아야합니다.

+0

왜 DateTime으로 변환해야합니까 ?? 이것은 DateTimeOffset을 사용하여 해결 된 문제를 다시 가져 오게 될 것입니다. –

+0

@PanagiotisKanavos이 답변에서 설명 목적으로 만 사용하십시오. – NineBerry

+0

@NineBerry - 혼란을 방지하기 위해 약간의 수정 작업을했습니다. –