「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
このように、date
とdatee
の結果は異なりますが、これは理解できましたが、なぜ日付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、奇妙な結果、なぜですか?
また、正しい形式を使用して日付形式文字列を使用する場合も重要です。
@ "YYYY"は週ベースの暦年です。
@ "yyyy"は通常の暦年です。
あなたはブログ全体を見ることができます。
よくある間違いは、YYYYを使用することです。 yyyyは暦年を指定しますが、YYYYはISO年/週カレンダーで使用される年(「週」)を指定します。ほとんどの場合、yyyyとYYYYは同じ数値になりますが、異なる場合があります。通常、暦年を使用する必要があります。
from 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.
yyyy
とYYYY
を区別するすべての回答は、別の質問に対する正しい回答です。質問自体は別のものを指します。
これら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タイムゾーン