Je stocke des valeurs au format GMT sur un serveur. je les télécharger sur l'appareil et le convertir aux utilisateurs heure locale via la fonction suivante:NSDateFormatter renvoie le 1er janvier 2001 comme date
- (void)convertTimeZone
{
//Converts the match timing from GMT to the users local time
NSString *serverDateString = [NSString stringWithFormat:@"%@-%@-%@ %@:%@ GMT", year, month, day, hour, min];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm zzz";
NSDate *serverDate = [dateFormatter dateFromString:serverDateString];
NSString *localDateString = [dateFormatter stringFromDate:serverDate];
NSDate *localDate = [dateFormatter dateFromString:localDateString];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit |NSMinuteCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:localDate];
min = [NSString stringWithFormat:@"%d",[components minute]];
hour = [NSString stringWithFormat:@"%d",[components hour]];
day = [NSString stringWithFormat:@"%d",[components day]];
month = [NSString stringWithFormat:@"%d",[components month]];
year = [NSString stringWithFormat:@"%d",[components year]];
}
Presque tout le monde obtient le bon moment après la conversion. Cependant peu d'utilisateurs ont écrit pour indiquer que la date qu'ils reçoivent est le 1er janvier 2001, qui est la date d'initialisation sur iOS et OSX. Et la date est le décalage horaire entre GMT et leur date locale.
Les valeurs année, mois, jour, heure et min sont correctement définies et reçues par le serveur. Je le sais parce que certaines des autres valeurs sont affichées correctement.
Toutefois, ce processus de conversion date-heure ne fonctionne pas correctement dans certains cas.
Pourquoi cela se produit-il?
Puisqu'il n'est jamais arrivé sur mon appareil mais est arrivé à des utilisateurs dans d'autres pays, je ne sais pas comment le reproduire. Ils ont essayé de le redémarrer mais ils ont toujours la mauvaise date. Merci.
Sans voir vos entrées et sorties, il est impossible de localiser tous les endroits où vous pourriez avoir foiré. (BTW, -1 pour déclarer un "bogue iOS" lorsque les probabilités sont infimes) –
Votre code n'a absolument aucun sens - vous convertissez une chaîne en NSDate, la convertissez en chaîne, puis vous la convertissez en NSDate, tous avec le même formateur de date, et sans aucun changement à la configuration du formateur de date. Qu'espères-tu changer? –
(Et comment vous attendez-vous à ce que ci-dessus pour convertir de GMT à l'heure locale?) –