Quelle est la différence exacte entre 'YYYY' et 'yyyy'. Je lis dans ce lien , il est écrit que
Une erreur courante consiste à utiliser AAAA. aaaa spécifie l'année civile alors que AAAA spécifie l'année (de la "Semaine de l'année"), utilisée dans l'ISO calendrier année-semaine. Dans la plupart des cas, aaaa et aaaa donnent le même résultat nombre, mais ils peuvent être différents. En règle générale, vous devriez utiliser le année civile.
Mais quand j'essaie d'utiliser
NSString *stringDate = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"];
NSDate *date=[dateFormatter dateFromString:stringDate];
NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000
NSString *stringDatee = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init];
[dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"];
NSDate *datee=[dateFormatterr dateFromString:stringDatee];
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM
Comme ici, résultat date
et datee
différent, ce que j'ai compris, mais pourquoi le résultat de la date 2 et de la date 3 est-il différent? Lorsque je crée la date d'une chaîne et que je retourne la même chose en chaîne, mais que les différences de sortie sont identiques?
Quelqu'un at-il une raison à propos de la même chose? Bien que cela spécifie la semaine de l'année, je devrais quand même obtenir le même résultat.
Merci..
MODIFIER :-
Si je code
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]];
NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM
Si les résultats me donnent un résultat correct, mais identique à celui que je passe sous forme de chaîne à date, je reçois 2013-01-05 12:00:00 +0000
, vérifiez la date 2 de NSLog, résultat étrange, pourquoi?
Il est également important d’utiliser une chaîne de format de date avec le format correct.
@ "AAAA" est une année civile basée sur la semaine.
@ "aaaa" est une année civile ordinaire.
Vous pouvez parcourir tout le blog, c’est bien de le regarder.
Une erreur courante consiste à utiliser AAAA aaaa spécifie l'année civile alors que AAAA spécifie l'année (de “Semaine de l'année”), utilisé dans le calendrier année-semaine ISO. Dans la plupart yyyy et YYYY donnent le même nombre, quelle qu’elle soit différent. En règle générale, vous devez utiliser l'année civile.
à partir de Apple Docs
dd/MMM/YYYY - e.g.:1 01/Jan/2000; answer : 19/dec/1999
(see weekly calendar December month last Monday
suppose leaf year + 1 day)
dd/MMM/yyyy - eg: ordinary - no problem.
Toutes les réponses différenciant yyyy
et YYYY
sont des réponses correctes pour une autre question. La question elle-même fait référence à autre chose.
Pourquoi ces deux valeurs sont-elles différentes? (extrait de la question)
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM
La réponse ici @ P.J est qu’elles n’ont pas vraiment de valeur différente. Lorsque vous enregistrez une date NSDate (Date 2), vous obtenez la description complète de votre objet qui se trouve être au format UTC Timezone . Cette logique ne se produit pas lors de la journalisation de la date 3, car elle a déjà été convertie en chaîne et a appliqué votre fuseau horaire.
Pour imprimer Date 3 de la même manière que vous obtenez Date 2. Vous devez spécifier le fuseau horaire UTC pour Date 3. Quelque chose comme ce qui suit:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString);
J'espère que cela t'aides.
tl; dr le fuseau horaire