背景
"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
なぜタイムゾーンが違うのですか?
印刷 'dt'を設定することができます。あなたの質問をその出力に更新してください。ほとんどの場合、あなたの問題を引き起こしている古い日付です。 – rmaddy
無関係ですが、 'dateFormat'を同じフォーマットに2回設定するのはなぜですか?なぜ、 'date'に文字列補間を使うのですか?ちょうど 'let dt = dateFormatter.date(from:date)' – rmaddy