web-dev-qa-db-fra.com

NSDate a défini le fuseau horaire dans swift

comment puis-je retourner un NSDate dans un fuseau horaire prédéfini à partir d'une chaîne

let responseString = "2015-8-17 GMT+05:30"
var dFormatter = NSDateFormatter()
dFormatter.dateFormat = "yyyy-M-dd ZZZZ"
var serverTime = dFormatter.dateFromString(responseString)
println("NSDate : \(serverTime!)")

le code ci-dessus renvoie l'heure comme

2015-08-16 18:30:00 +0000
10

comment puis-je retourner un NSDate dans un fuseau horaire prédéfini?

Tu ne peux pas.

Une instance de NSDate ne contient aucune information sur le fuseau horaire ou le calendrier. Il identifie simplement un point dans le temps universel.

Vous pouvez interpréter cet objet NSDate dans le calendrier de votre choix. L'interpolation de chaîne de Swift (la dernière ligne de votre exemple de code) utilise un NSDateFormatter qui utilise UTC (c'est le "+0000" dans la sortie).

Si vous voulez que la valeur de NSDate sous forme de chaîne dans le calendrier de l'utilisateur actuel, vous devez explicitement configurer un formateur de date pour cela.

11
Nikolai Ruhe

Le format de date doit être attribué à la propriété dateFormat du formateur de date à la place.

let date = NSDate.date()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let str = dateFormatter.stringFromDate(date)
println(str)

Cela imprime la date en utilisant le fuseau horaire par défaut sur l'appareil. Seulement si vous voulez la sortie selon un fuseau horaire différent, vous ajouterez par exemple

Swift 3. *

dateFormatter.timeZone = NSTimeZone(name: "UTC")

Swift 4. *

dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

référez-vous également au lien http://www.brianjcoleman.com/tutorial-nsdate-in-Swift/

38
Saumil Shah

Swift 4.0

dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
10
Amr