2016-11-05 10 views
0

サーバから文字列を取得しています この文字列をNSDateに変換します。 「2016-11-05T12:00:00.000Zを」 UTC NSDateをローカルNSDateに変換しないでください

class func convertUTCDateToLocateDate(dateStr:String) -> NSDate{ 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 
     dateFormatter.timeZone = NSTimeZone(name: "UTC") 
     let date = dateFormatter.dateFromString(dateStr) 


    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z" 
    dateFormatter.timeZone = NSTimeZone.localTimeZone() 
    let timeStamp = dateFormatter.stringFromDate(date!) 
    let dateForm = NSDateFormatter() 
    dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 
    dateForm.timeZone = NSTimeZone.localTimeZone() 
    let dateObj = dateForm.dateFromString(timeStamp) 
    return dateObj! 
} 

は、パラメータ文字列があるとしたが、私は、この文字列を変換し、 NSDateオブジェクトを返すとき、それは私のローカル時間に応じて時刻を変更しません。 timeStamp文字列(上記のコード)に正確な時刻が表示されます。しかし、私はその timeStamp文字列をNSDateに変換しようとすると、その日付と時刻をパラメータとして再度表示します。

+0

日付形式で 'Z'を引用しないでください。あなたは文字通り 'Z'を望んでいません。あなたはタイムゾーンとして適切に扱われることを望みます。 – rmaddy

答えて

2

NSDateの時刻を変更するべきではありません。 NSDatesはほんの一瞬で、秒単位でカウントされます。タイムゾーン、日、月、年、時、分、秒などについてのヒントはありません。直接印刷すると、時間は常にUTCで出力されます。
タイムゾーンの時刻を表示するように日付を変更すると、実際にはUTCで時刻が変更されるため、日付はタイムゾーンに関係なく、別の時刻を表すようになります。
日付のフォーマッタを使用して表示する必要がある場合は、変更しないでそのままにしておきます。
タイムゾーンに依存しない時間計算を行う必要がある場合は、代わりにNSDateComponentsを使用することもできます。

+0

NSDateComponentを使用して時間を計算する例を引用してください。 例:午後11時33分に45分追加すると、午前12時18分に変換できます –

+0

各コンポーネント(年、月、日、時、分など)は整数型です。追加するだけです。 – vikingosegundo

+0

手がかりを得ました.. ありがとうございます... –

0

NSDateにはタイムゾーンがありません。それは何かとは独立した時間帯、特にタイムゾーンです。 「UTC NSDateをローカルNSDateに変換」することはできません。この文自体は意味をなさないものです。

関連する問題