2010-11-25 5 views
1

J'ai quelques problèmes étranges avec le UIDatePicker. J'ai vérifié les forums et je n'ai pas eu de chance avec les réponses fournies.uidatepicker étrange comportement - ne pas définir la date et la mauvaise date étant sélectionné

Dites que je choisis une date, 20/11/2010 locale EN_AUS. Lorsque je NSLog la propriété de date est 2010-11-19 13:00:00 +0000. Mais quand je le formate et l'affiche dans une étiquette, il semble correct, c'est-à-dire 20/11/2010 ?!

Je sauvegarde cette date de sorte que la prochaine fois que l'utilisateur entre dans cette vue, l'uiDatePicker devrait automatiquement être défini à la dernière date sélectionnée. Mais cela n'arrive tout simplement pas, il affiche toujours la date actuelle.

J'ai énuméré le code ci-dessous importante, un conseil est apprécié :)

// setting up the uiDatePicker 
NSLocale *ozLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AUS"]; 
self.datePicker.calendar = [NSCalendar autoupdatingCurrentCalendar]; 
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:39600]]; // Melbourne time zone 
[self.datePicker setLocale:ozLocale]; 
self.datePicker.timeZone = [NSTimeZone localTimeZone]; 
[ozLocale release]; 

// displaying the date from the uidatePicker 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
self.dateLabel.text = [dateFormatter stringFromDate:self.datePicker.date]; 
[dateFormatter release]; 


// In viewWillAppear I set the uiDatePicker. lastDatePicked has the value of 2010-11-19 13:00:00 +0000 at this point 
[self.datePicker setDate:self.appDelegate.lastDatePicked animated:FALSE]; 
+0

Cela ne suffit pas code.You doit montrer que le code où vous enregistrez cette fois-ci et le format de la date pendant la sauvegarde. declration de la propriété lastDatePicked. – Ishu

Répondre

1

Tout d'abord, notez que 2010-11-19 13:00:00 +0000 est en UTC de sorte que la date formatée pour EN_AUS va être en avance de 11 heures, c'est pourquoi vous voyez 20/11/2010 lors du formatage en utilisant les paramètres régionaux. Donc ce n'est pas un problème du tout et c'est le bon comportement.

Je ne vois pas de problème avec votre ligne setDate:animated: donc je m'assurerais que self.appDelegate et self.datePicker sont réellement non-nul juste au-dessus de cette ligne.

+0

Hey Mike, merci d'avoir expliqué le problème de formatage. Je pensais que c'était un bug mais maintenant c'est tout à fait logique! AppDelegate et DatePicker ne sont pas nuls comme vous l'avez suggéré. perplexe sur celui-ci :(merci pour vos conseils cependant. – bennythemink

1

Il y a un bogue dans sélecteur de date et heure de pommes lorsque le téléphone fuseau horaire a été fixé. Ça a été dans toutes les versions du téléphone depuis sa sortie et ça a été une vraie douleur pour moi là où je vis (Nouvelle Zélande avec un + 12/+ 13 GMT, ce qui semble grossir le problème). Vous pouvez reproduire le problème n'importe où une date/heure est entrée, par exemple le champ d'anniversaire de contact de l'iphone.

J'ai lu dans certains endroits que ce morceau de code résout parfois le problème:

datePicker.timeZone = [NSTimeZone localTimeZone]; 

Voir this answer ou this one pour plus de détails ..

+0

merci pour l'info Shane – bennythemink

0

Utilisez cette méthode pour obtenir la date correcte:

func getDateStamp(date:String)-> String{ 

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +SSSS" 
dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 

guard let date = dateFormatter.date(from: date) else { 
    // assert(false, "no date from string") 
    return "" 
} 

dateFormatter.dateFormat = "dd MMMM,yyyy" //"yyyy-MM-dd" 
dateFormatter.timeZone = TimeZone.current 

let st = dateFormatter.string(from: date) 

return st 

}

Questions connexes