Dans Cocoa, comment utiliser NSTimeZone pour obtenir le décalage de fuseau horaire du système sous forme de chaîne?

StackOverflow https://stackoverflow.com/questions/1052373

Question

Pour PDT, je voudrais & "; -0700 &";.

.

J'obtiens une date dans le passé pour déterminer depuis combien de temps il s'est passé quelque chose.

NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end

Je construirai la chaîne de date ailleurs, mais je ne sais pas comment accéder au fuseau horaire local.

J'ai lu les rubriques relatives à la programmation des dates et des heures Apple pour Cocoa, ainsi que les références de classe NSTimeZone et NSDate, mais il m'est trop difficile de rassembler les informations. Je pourrais vraiment utiliser quelques lignes de code juste pour montrer comment il est utilisé.

Mise à jour : en essayant de résoudre ce problème, j'écrivais du code à l'aide d'un modèle de ligne de commande afin de pouvoir essayer les choses rapidement. Je viens d'essayer mon code précédent sur iPhone et j'obtiens . NSDate pourrait ne pas répondre à '+ dateWithString:' : désolé si cela a ajouté à la confusion, qui aurait su qu'Apple changerait une classe aussi basique.

Était-ce utile?

La solution

Le décalage de fuseau horaire dépend de la date dans une grande partie du monde & # 8212; les parties de celle-ci qui utilisent l'heure d'été / heure d'été.

Le seul moyen correct consiste à générer la chaîne entière à partir de la date et du fuseau horaire. Utilisez NSDateFormatter pour cela.

Autres conseils

Utilisez NSDateFormatter pour créer NSDate à partir d'une chaîne:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];

NSString *dateString = [inputFormatter stringFromDate:formatterDate];

NSLog(@"date:%@", dateString);

De cette façon, vous obtenez l'heure locale à partir d'une chaîne, par exemple la date spécifiée par la chaîne:

  

" 1976-04-01 12:34:56 -0700 "

est dans le fuseau horaire - 0700, (je suis dans le fuseau horaire GMT +1000), donc je reçois:

  

2009-11-17 22: 13: 46.480   cmdline [10593: 903] date: 1976-04-02   05:34:56 +1000

La meilleure solution consiste probablement à utiliser un simple formateur de calendrier

NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);

qui produira '-0700'

ou omettez la deuxième ligne si vous souhaitez connaître le fuseau horaire actuel du système (vous ne savez pas exactement ce que vous demandiez)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top