iOS 7: Convertir NSDate à chaîne avec la coutume de fuseau horaire et d'obtenir de nouvelles NSDate
Je souhaite modifier l'heure du système (de personnaliser la NSTimeZone
) et de revenir une nouvelle NSDate
objet.
Le code que j'ai fait
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSLog(@"System time: %@", [dateFormatter stringFromDate:[NSDate date]]);
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Aqtobe"]];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Aqtobe time: %@", dateString);
La sortie
System time: 2014-02-05 10:00:46 +0000
Aqtobe time: 2014-02-05 15:00:46 +0500
Mais si j'essaie d'obtenir de nouveaux NSDate objet de Aqtobe temps:
NSLog(@"New NSDate: %@", [dateFormatter dateFromString:dateString]);
- Je obtenir
New NSDate: 2014-02-05 10:02:40 +0000
Où j'ai eu tort? Merci d'avance
NSDate
aurez toujours le retour à l'heure GMT. Vous pouvez les mettre en forme quelque soit le fuseau horaire que vous voulez, quand vous imprimez (comme vous l'avez fait). Vous pouvez trouver plus d'informations ici- Je ne comprends pas complètement. Vous voulez vérifier si une date est comprise entre deux dates?
- oui
- Je vais l'écrire comme une réponse à cause du manque de place.
- Vous n'êtes pas fournir le fuseau horaire par Défaut.. fuseau horaire est GMT. C'est donc de fournir la même date
Vous devez vous connecter pour publier un commentaire.
NSDate renvoie toujours la date GMT +0:00.
Donc, il (objet NSDate) ont toujours corriger la valeur convertie mais en GMT +0:00.
Donc, pour l'utiliser comme texte que vous aurez toujours utiliser la même date de formateur avec même zone.
Si vous souhaitez utiliser la date de chaîne à partir de la date dans d'autres lieux (de dateformatter la portée de l'objet), il est préférable de faire de la méthode spéciale pour la conversion.
Il est clairement expliqué ci-dessous avec un exemple:
Pour l'explication détaillée, vous pouvez vous référer à cette question: Est-ce que [NSDate date] retourne la date et l'heure locales?
NSDate
a de nombreuses méthodes pour la comparaison de date commeisEqualToDate:
(pour une description détaillée des méthodes et l'utilisation, vous pouvez voir ce DONC, la question).Cette méthode, que j'ai pris de ici, vous permettra de déterminer si
date
est entrefirstDate
etlastDate
.J'espère que c'est ce que vous vouliez dire. Si non, veuillez expliquer exactement ce que vous essayez de faire.
"start_time":"2000-01-01T15:00:00Z","end_time":"2000-01-01T16:00:00Z"
) et je dois vérifier si mon système de temps (Il doit être à Aqtobe fuseau horaire!) entre ces 2 dates.[dateFormatter dateFromString]
. Mais il me prend de la date du système sans correction de fuseau horaire qui je l'ai expliqué dans ma question.Vous pouvez utiliser
NSDateComponents
etNSCalendar
pour créer une nouvelle date. À partir de la La Date et l'Heure Guide de ProgrammationDe toute façon, gardez à l'esprit qu'une date est un point unique dans le temps. Ce que vous afficher à l'utilisateur est différent en fonction de leur emplacement et de fuseau horaire.