Was ist der genaue Unterschied zwischen 'JJJJ' und 'JJJJ'? Ich habe in diesem Link gelesen , dass es heißt
Ein häufiger Fehler ist die Verwendung von JJJJ. JJJJ gibt das Kalenderjahr an, während JJJJ das Jahr (der „Woche des Jahres“) angibt, das im ISO-Jahres-Wochen-Kalender verwendet wird. In den meisten Fällen ergeben JJJJ und JJJJ die gleiche Anzahl, sie können jedoch unterschiedlich sein. Normalerweise sollten Sie das Kalenderjahr verwenden.
Aber wenn ich versuche zu benutzen
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
Wie hier, Ergebnis zu date
und datee
unterschiedlich, was ich verstanden habe, aber warum sind Ergebnis von Datum 2 und Datum 3 unterschiedlich? Wie erstelle ich ein Datum aus einer Zeichenfolge und kehre es wieder in eine Zeichenfolge um, aber die Ausgabe stimmt nicht überein?
Hat jemand einen Grund dafür? Obwohl es die Woche des Jahres angibt, sollte ich trotzdem das gleiche Ergebnis erzielen.
Vielen Dank..
EDIT: -
Wenn ich codiere
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
Wenn das Ergebnis das richtige Ergebnis ist, aber dasselbe, das ich bisher als Zeichenfolge übergeben habe 2013-01-05 12:00:00 +0000
, überprüfen Sie Datum 2 von NSLog, Seltsames Ergebnis, warum?
description
Methode immer so (und in UTC) angezeigt wird - in einem NSDate gibt es kein "Format" (oder keine Zeitzone) .Antworten:
Auch bei Verwendung einer Datumsformatzeichenfolge ist die Verwendung des richtigen Formats wichtig.
@ "JJJJ" ist ein wochenbasiertes Kalenderjahr.
@ "JJJJ" ist ein gewöhnliches Kalenderjahr.
Sie können den gesamten Blog durchgehen, es ist gut, einen Blick darauf zu werfen
https://web.archive.org/web/20150423093107/http://realmacsoftware.com/blog/working-with-date-and-time
http://realmacsoftware.com/blog/working-with-date-and-time (toter Link)
quelle
von Apple Docs
quelle
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.
quelle
Alle Antworten unterscheiden sich
yyyy
undYYYY
sind die richtigen Antworten auf eine andere Frage. Die Frage selbst bezieht sich auf eine andere Sache.Warum unterscheiden sich diese beiden Werte? (aus der Frage extrahiert)
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000 NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM
Die Antwort hier @PJ ist, dass sie sich im Wert nicht wirklich unterscheiden. Wenn Sie ein NSDate (Datum 2) protokollieren, erhalten Sie die vollständige Beschreibung Ihres Objekts, das sich zufällig in der UTC- Zeitzone befindet . Diese Logik tritt beim Protokollieren von Datum 3 nicht auf, da es bereits in einen String konvertiert und Ihre Zeitzone angewendet wurde.
Um Datum 3 auf die gleiche Weise zu drucken, wie Sie Datum 2 erhalten, sollten Sie UTC TimeZone für Datum 3 angeben.
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);
Hoffe das hilft.
tl; dr die Zeitzone
quelle