NSDateFormatter avec le fuseau horaire par défaut donne autre date que NSDate méthode de description
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[_dateFormatter setDateFormat:@"dd-MM-yy HH:mm"];
NSString *dateString = [_dateFormatter stringFromDate:date];
NSLog(@"Date: %@ formatted: %@", date, dateString);
[_dateFormatter release];
Me donne mal au format date:
Date: 2013-01-31 18:00:00 +0000 mis en forme: 31-01-13 19:00 (à partir de timestamp: 1359655200.000000)
En ligne de l'outil de conversion: http://www.onlineconversion.com/unix_time.htm indique que la 1ère date est correcte: 2013-01-31 18:00:00 +0000.
Pourquoi NSDateFormatter produit date de NSLog? Ne devrait pas [NSDate description]
utilisation defaultTimeZone lors de l'impression à la console? Je reçois la même erreur avec [_dateFormatter setTimeZone:[NSTimeZone localTimeZone]]
; et [_dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]
;
OriginalL'auteur Lukasz | 2013-05-23
Vous devez vous connecter pour publier un commentaire.
Ce comportement est normal, parce que:
[NSDate description]
UTC, pas le fuseau horaire local (c'est pourquoi il y a un+0000
dans la description).NSDateFormatter
est à l'aide de la zone de l'heure locale.La seule façon que ceux-ci correspondent en place est si vous dites à
NSDateFormatter
à utiliser UTC. Qui pourrait ne pas être ce que vous voulez, bien que.Juste de l'IMOA, il est généralement préférable d'utiliser des
timeZoneWithName:
au lieu detimeZoneWithAbbreviation:
. Pour l'UTC, il n'a pas d'importance, mais dans la plupart des cas, le nom est le meilleur choix.La raison en est certaines abréviations sont les mêmes, comme l'est est de l'Australie et les états-unis.
pourquoi?
Les abréviations ne sont pas uniques, et peut être utilisé par plus d'un fuseau horaire. Les noms sont uniques.
OriginalL'auteur Tom Harrington
C'est le fuseau horaire problème comme vous l'avez découvert. Fuseau horaire par défaut prend le système de fuseau horaire. Dire, si vous êtes en GMT+1, vous êtes censé recevoir 19h00. Le convertisseur vous avez utilisé vous donne l'heure GMT.
Si vous voulez le temps propre fuseau horaire, et vous savez le décalage par rapport à GMT vous pouvez utiliser ce qui suit,
Espère que cela résout le problème.
BTW: ce n'est pas moi qui a voté à vous.
Ce n'est pas un problème. C'est faux de toute façon.
J'ai édité la réponse.
C'est une terrible façon à obtenir un fuseau horaire spécifique. Ce qui se passe lorsque le fuseau horaire commutateurs à (ou de) l'heure d'été, comme de nombreux fuseaux horaires?
NSTimeZone
offre de bien meilleures façons d'obtenir un fuseau horaire de référence qui va être à l'heure demain, la semaine prochaine, de six mois à partir de maintenant, etc.OriginalL'auteur Vignesh