2017-05-10 12 views
1

からオフセット値を取得するのは簡単ですが、Googleで正確な質問を見つけるのは難しいです。 UTCのプリントアウト値を無視しようとしています。Swift:日付オブジェクト

(それは0900、-0200、などかもしれない...) "2017-05-01T12:30:00から0700" 私は複数の日付を受け取り、ここでこの1は一例で

let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let result = formatter.date(from: time) {print result} 

dateTimeResultプリントの値:

私はこれらの行を使用して値に適用し、一度

2017年5月1日午前19時30分00秒UTC

迅速な日付オブジェクトを使用して、「-0700」の部分をどのようにスライスするか、-7または+7(この例は負です)に分単位で掛けます。その合計をintとしてDBに保存します(異なるタイムゾーンを後で分類するために必要です)。そして、このラインを使用して着信日付入力にその合計を適用する:

​​

目標は、この日で終わることです:

「2017年5月1日12時30分00秒」

私はすでに文字列操作を使用したソリューションを持っていますが、それは理想的な解決策ではないと思います。それが文字列で行われなければならない場合、どうやってそれをしますか?

+0

正規表現で日付文字列からタイムゾーンを取り除きます。私はそれを明確にするために質問を更新します。 – user1019042

答えて

2

場合タイムゾーン情報を常に無視して、日付と時刻の部分だけを正しく欲しいと正しく理解しています。この場合

は、私は後での使用のためのオフセット日付の一部を保存しています

let dateString = "2017-05-01T12:30:00-0700" 
let dateStringIgnoringTimeZone = dateString.replacingOccurrences(of: "[+-]\\d{4}", with: "", options: .regularExpression) 
print(dateStringIgnoringTimeZone) // "2017-05-01T12:30:00" 
let dateFormatter = DateFormatter() 
dateFormatter.calendar = Calendar(identifier: .iso8601) 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
let date = dateFormatter.date(from: dateStringIgnoringTimeZone)! 
1

私はあなただけのタイムゾーンは、文字列からのオフセットを取得するには、その時間帯

let time = "2017-05-01T12:30:00-0700" 
let dateFormatter = DateFormatter() 
dateFormatter.calendar = Calendar(identifier: .iso8601) 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let result = dateFormatter.date(from: time) { 
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
    print(dateFormatter.string(from: result)) // "2017-05-01 16:30:00 (corresponding time at my location GMT-3) 
    // to display it at -0700 just set the formatter timaZone 
    dateFormatter.timeZone = TimeZone(secondsFromGMT: -3600 * 7) 
    print(dateFormatter.string(from: result)) // "2017-05-01 12:30:00\n" 
} 

で時間を表示するたDateFormatterを使用し、それがあるとして、日付を維持しなければならないと思う:

let hours = Int(String(time.characters.suffix(5).prefix(3))) ?? 0 
var minutes = Int(String(time.characters.suffix(2))) ?? 0 
if String(time.characters.suffix(5).prefix(1)) == "-" { minutes = -minutes } 
let offset = hours * 3600 + minutes * 60 // -25200 
+0

-7時間は一例ですが、それは-8、+4などとすることができます。その時間差はどうやって取得できますか?文字列操作ですか? – user1019042

+0

タイムゾーンを混乱させないでください。現在のものを使用してください。時間を別の場所に表示する場合は、その場所を表示する必要があります。コンポーネントが必要な場合は、dateComponentsを取得する –

+0

オフセット 'TimeZone.current.secondsFromGMT()'が必要な場合 –

関連する問題