2016-04-05 7 views
1

NSDateFormatterで、オフセット付きのISO-8601の日付+時間値を渡すと、オフセットが読み込まれ、出力がUTC値に調整されます:SwiftのISO-8601文字列からのオフセット値の抽出

// Setup 
let formatter  = NSDateFormatter() 
formatter.locale  = NSLocale(localeIdentifier: "en_US_POSIX") 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 

// Test 
let input  = "2016-04-16 04:12:00-0800" 
let output = formatter.dateFromString(input) 
let outputStr = formatter.stringFromDate(output) 
print(outputStr) // "2016-04-15 08:12:00-0000" 

これまでのところ、とても良いです。

しかし、私はそのオフセット値で自分自身を取得したい。私のアプリケーションは、日付時刻のオフセット情報を保持するWebサービスのクライアントなので、同じことをする必要があります(盲目的にWebサービスにoutputStrを返すと、オフセット情報が失われてデータベースがオフセット日時が収集されたときだった。

NSDateFormatter日付だけを出力するためのタイムゾーン情報を受け入れているようだ、私は入力文字列のうち、数値オフセットを取得するための方法はありません。

答えて

0

「自己説明」例

import Foundation 

let formatter  = NSDateFormatter() 
formatter.locale  = NSLocale(localeIdentifier: "en_US_POSIX") 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ" 

// Test 
let input  = "2016-04-16 04:12:00-0800" 
let output = formatter.dateFromString(input) 

// with curent time zone (system default 
let outputStrL = formatter.stringFromDate(output!) 

// with time zone Z+0000 
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
let outputStr = formatter.stringFromDate(output!) 

// with time zone Z-0800 
formatter.timeZone = NSTimeZone(forSecondsFromGMT: -8 * 3600) 
let outputStr1 = formatter.stringFromDate(output!) 

print("My local time:", outputStrL) 
print("GMT+0000 time:", outputStr) 
print("GMT-0800 tume:", outputStr1) 

/* 
My local time: 2016-04-16 14:12:00+0200 
GMT+0000 time: 2016-04-16 12:12:00+0000 
GMT-0800 tume: 2016-04-16 04:12:00-0800 
*/ 

入力文字列を出力ストリング(outputStr、outputStrL、outputStr1)、それから作成されたNSDateは同じ値(時間)を表します

+0

この例では、指定された文字列の日付+時刻値からタイムゾーンオフセットを取得する方法を示していません。 – Dai

+0

??入力文字列が特定の時間値を表している場合、SAME VALUEは異なる時間オフセットを持つ文字列として表すことができます。 – user3441734

+1

あなたはちょうど入力文字列を解析し、その文字列から-0800を取りますか?またはそれが表す時間が必要ですか?ちなみに – user3441734

関連する問題