2017-10-02 10 views
0

배경
"HH : mm"형식의 시간 문자열을 UTC에서 로컬 시간대로 변환해야합니다. 예를 들어, UTC 시간이 09:00 인 경우 현지 시간 (스톡홀름/유럽)은 2 시간 전이어야합니다. 나는 스톡홀름/유럽 시간 09:00 (UTC)를 변환 할 때UTC에서 현지 시간대로 변환 할 때 잘못된 결과가 나타납니다.

문제
I 10:00를 얻을. 11 시가되어야합니다.

func UTCToLocal(date:String) -> String { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "HH:mm" 
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 

    let dt = dateFormatter.date(from: date) 
    dateFormatter.timeZone = TimeZone.current //Stockholm/Europe 

    return dateFormatter.string(from: dt!) 
} 

print(UTCToLocal(date: "09:00")) //prints 10:00 

왜 시간대가 다른 것입니까?

+0

인쇄'dt'을 설정합니다. 질문을 출력으로 업데이트하십시오. 대부분 문제가 발생한 이전 날짜 일 가능성이 큽니다. – rmaddy

+1

관련이 없지만 'dateFormat'을 같은 형식으로 두 번 설정하는 이유는 무엇입니까? 그리고 왜'date'에 문자열 보간을 사용합니까? 그냥'let dt = dateFormatter.date (from : date)' – rmaddy

답변

3

시간을 지정했지만 요일이 없으므로 "09:00"은 에서 "2000-01-01 09:00:00 +0000"으로 변환됩니다. 그 당시 스톡홀름에서는 일광 절약 시간제가 사용되지 않았으며 현지 시간은 10:00이었습니다.

당신은 현재 날짜 변환이 다음

dateFormatter.defaultDate = Date() 
+0

하자! 나는 너에게 충분히 감사 할 수 없다! – rilar