2015-08-15 19 views
13

Voglio convertire 2015-08-14T20:02:25-04:00 a 2015-08-14 16:02
Ho provato di seguito, ma non è possibile eseguire bene (restituito nil).Come posso convertire la data del fuso orario inclusa in swift?

let d = "2015-08-14T20:02:25-04:00" 
let formatter = NSDateFormatter() 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZZ" 
let date: NSDate? = formatter.dateFromString(d) 

Come posso convertire questo formato di data?

+0

Non sono sicuro che 'NSDateFormatter' abbia un modo diretto, ma è possibile scomporre la stringa (cioè dividere in data, ora, TZ) e creare una stringa conforme da inserire in' NSDateFormatter'. –

risposta

24

Xcode 8 • Swift 3

let dateString = "2015-08-14T20:02:25-04:00" 
let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let dateFromString = formatter.date(from: dateString) { 
    formatter.dateFormat = "yyyy-MM-dd HH:mm" 
    let stringFromDate = formatter.string(from: dateFromString) 
} 

Hai bisogno di fuggire 'T' e l'uso "xxxxx" per "-04: 00":

let dateString = "2015-08-14T20:02:25-04:00" 
let formatter = NSDateFormatter() 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let dateFromString = formatter.dateFromString(dateString) { 
    formatter.dateFormat = "yyyy-MM-dd HH:mm" 
    let stringFromDate = formatter.stringFromDate(dateFromString) 
} 

Se è necessario un riferimento è possibile utilizzare questo:

enter image description here

+0

Potrei. grazie! – naohide

+0

@naohide siete i benvenuti –

+0

Non funziona se uso xxx per '+05: 00' – Vakas

2
let date: String = "2015-08-14T20:02:25-04:00" 
let fcBackendDateFormat = "yyyy-MM-dd'T'HH:mm:ss-ss:ss" 

let formatter = NSDateFormatter() 
formatter.dateFormat = fcBackendDateFormat 
println(formatter.dateFromString(date)) // "Optional(2015-08-14 18:02:00 +0000)" 

Come si può vedere 2 ore vengono sottratti dal momento in passato come la data viene interpretata come UTC e nel mio fuso orario che significa -2 ore.

+0

Mi chiedo come questa risposta abbia ottenuto due upvotes. 's' è solo per secondi. Non è possibile utilizzarlo nel formato della data per analizzare il fuso orario dalla stringa della data. Secondo problema in questa risposta è che senza segno senza tracce di fronte ad esso. Terzo, se non si imposta la versione locale del programma di formattazione su "en_US_POSIX" il codice potrebbe bloccarsi a causa del formato orario del dispositivo impostato su 12 ore anziché 24 ore automaticamente dalle impostazioni locali del dispositivo o manualmente impostato dall'utente. –

1

È possibile utilizzare:

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZ" 

Spero che questo aiuto!