2017-10-02 1 views
0

背景
"HH:mm"というUTCからローカルタイムゾーンに変換する必要があります。たとえば、UTC時間が09:00の場合、現地時間(ストックホルム/ヨーロッパ)は2時間先にする必要があります。UTCからローカルタイムゾーンに変換すると間違った結果が返される

問題
私はストックホルム/欧州時間に9時(UTC)に変換すると、私は午前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'を同じ​​フォーマットに2回設定するのはなぜですか?なぜ、 'date'に文字列補間を使うのですか?ちょうど 'let dt = dateFormatter.date(from:date)' – rmaddy

答えて

3

時間は指定しても曜日は指定しないため、「09:00」は から「2000-01-01 09:00:00 +0000」に変換されます。その瞬間、ストックホルムではサマータイムが有効ではなく、現地時間は10時だった。

あなたは当日の変換をしたいなら、あなたは

dateFormatter.defaultDate = Date() 
+0

それがうまくいった!私は十分にあなたに感謝できません! – rilar

関連する問題