2016-11-28 14 views
0

私はスレッドがたくさんあることを知っていますが、私の問題の解決策を見つけることができません。多分私は解決策を見ることができません...UTCを現地時間に - 間違った結果を迅速に

私はUTCを受け取ります。例:12:50 私はこの時間をMEZにそれぞれ変換して、ユーザーのデバイスのタイムゾーンにします。私の例では、atmはMEZ +1 to UTCなので、私は13:50を期待しています。

これは結果午前11時50分には、今の私の現在のタイムゾーンの時間である私のコード

//transform date to string 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 
    let newDateAsString:String = dateFormatter.string(from: self) 
    //is 12:50 UTC 

    //transform date to MEZ respectively to the local device timezone 
    let dateFormatterToDate = DateFormatter() 
    dateFormatterToDate.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
    let timeZone = TimeZone.autoupdatingCurrent.identifier as String 
    dateFormatter.timeZone = TimeZone(identifier: timeZone) 
    //same result with: dateFormatter.timeZone = NSTimeZone.local 

    //result is 11:50 but i would expect 13:50 
    if let result = dateFormatterToDate.date(from: newDateAsString) { 
     return result 
    } 

です。しかし、私はこれを理解していません。私は明示的に日付を与えます。これは変換する必要があります。誰かが私の間違いがどこにあるか知っていますか?

答えて

1

あなたがやっている変換は、あなたが意図しているのと逆です。日付の書式文字列にタイムゾーンの書式が含まれていないため、文字列newDateAsString(時刻は12:50)はタイムゾーンを指定しません。 dateFormatterToDateのタイムゾーンをMEZに設定し、newDateAsStringdateFormatterToDateに渡すと、MEZでDateオブジェクトを12:50にします。

デフォルトでは、日付はUTCとして表示されるため、MEZの12:50はUTCの11:50であるため、resultは11:50と表示されます。

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
dateFormatter.timeZone = NSTimeZone.local 
let localTimeZoneDateString = dateFormatter.string(from: self) 

は、あなたがこのようなコードを使用するローカルタイムゾーンの文字列として日付をフォーマットします
関連する問題