web-dev-qa-db-ja.com

NSDateFormatterの「YYYY」と「yyyy」の違い

「YYYY」と「yyyy」の正確な違いは何ですか。私は このリンク を読みました。

よくある間違いは、YYYYを使用することです。 yyyyは暦年を指定しますが、YYYYはISO年/週カレンダーで使用される年(「週」)を指定します。ほとんどの場合、yyyyとYYYYは同じ数値になりますが、異なる場合があります。通常、暦年を使用する必要があります。

しかし、私が使用しようとすると

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

このように、datedateeの結果は異なりますが、これは理解できましたが、なぜ日付2と日付3の結果が異なるのですか?文字列から日付を作成し、同じ文字列を再び逆にしますが、出力が不一致ですか?

誰もが同じ理由を知っていますか?年の週を指定していますが、それでも同じ結果が得られるはずです。

ありがとう。

編集:-

私がコーディングする場合

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

結果が適切な結果であるが、文字列として日付に渡すものと同じ場合、2013-01-05 12:00:00 +0000、NSLogの日付2、奇妙な結果、なぜですか?

60
P.J

また、正しい形式を使用して日付形式文字列を使用する場合も重要です。

@ "YYYY"は週ベースの暦年です。

@ "yyyy"は通常の暦年です。

あなたはブログ全体を見ることができます。

http://realmacsoftware.com/blog/working-with-date-and-time

52
X-Factor

よくある間違いは、YYYYを使用することです。 yyyyは暦年を指定しますが、YYYYはISO年/週カレンダーで使用される年(「週」)を指定します。ほとんどの場合、yyyyとYYYYは同じ数値になりますが、異なる場合があります。通常、暦年を使用する必要があります。

from Apple Docs

25
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.
4

yyyyYYYYを区別するすべての回答は、別の質問に対する正しい回答です。質問自体は別のものを指します。

これら2つの値が異なるのはなぜですか? (質問から抽出)

NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM

ここでの答えは@ P.Jであり、実際には価値に違いはないということです。 NSDate(Date 2)をログに記録すると、UTC Timezoneにあるオブジェクトの完全な説明を取得できます。このロジックは、日付3を既に文字列に変換してタイムゾーンを適用しているため、ログに記録するときには発生しません。

日付2を取得するのと同じ方法で日付3を印刷するには、日付3にUTC TimeZoneを指定する必要があります。次のようなものです。

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); 

お役に立てれば。

tl; drタイムゾーン

1
CoderPug