2015-11-25 1 views
0

Bonne journée! J'essaie de faire un sélecteur de dates en utilisant this boîte de dialogue de sélection de date. Maintenant, j'ai un problème sur le réglage de l'option defaultDate, Il nécessite NSDate donc j'ai fait cela.Swift 2.1 - NSDateFormatter Bogue étrange

let date = NSDate() 
let formatter1 = NSDateFormatter() 
formatter1.dateFormat = "MMM dd" 
formatter1.timeZone = NSTimeZone(abbreviation: "GMT") 
formatter1.timeZone = NSTimeZone(forSecondsFromGMT: 28800) 
let gmt8TimeZone = formatter1.stringFromDate(date) 
let dateToday = formatter1.dateFromString(gmt8TimeZone) 
print("\(gmt8TimeZone) - \(dateToday!)") 

DatePickerDialog().show("Choose Date", doneButtonTitle: "Done", cancelButtonTitle: "Cancel", defaultDate: dateToday!, datePickerMode: UIDatePickerMode.Date) { (date) -> Void in 
    self.dateSelected = date 
    self.showTimePicker() 
} 

Le problème est, il ne commençant le defaultDate que je mets ce qui est dateToday. Donc ce que j'ai fait, c'est que j'imprime la chaîne de date qui est gmt8TimeZone et dateToday et il me donne cette Nov 25 - 2000-11-24 16:00:00 +0000 pourquoi me donne-t-elle des dates différentes? ça devrait être le même droit? Ce que j'ai mal fait?

+0

chaîne extraite à partir de la date et l'impression de l'objet nsdate lui-même donne des valeurs différentes, je suppose que l'objet NSDate prend par défaut +0000 GMT. –

+0

@LEVIS OGCPAS Pourquoi changez-vous le fuseau horaire? –

+0

Toute la date que l'utilisateur soumet doit être de GMT + 8, les utilisateurs ont des fuseaux horaires différents sur leurs téléphones, donc je veux le rendre uniforme. –

Répondre

1

Fournissez simplement NSDate() au paramètre defaultDate. NSDate est fondamentalement un horodatage, un point fixe et un point absolu dans le temps, et n'est lié à aucun timeZone: NSDate() est absolument, totalement, maintenant. Lorsque vous manipulez NSDateFormatter pour le "réparer", vous quittez le monde de l'horodatage absolu pour entrer dans le monde des chaînes "aaaa-mm-jj ...", ce qui nécessite en effet que les fuseaux horaires soient interprétés comme des points dans le temps . Et puisque vous vous en mêlez, votre date dérive.