2

NSDateFormatterを使用してADとBCの日付を解析する方法と、0000年が解析に失敗する理由を理解しようとしています。

NSString *test1 = @"0000-01-01";
NSString *test2 = @"0001-01-01";
NSString *test3 = @"0002-01-01 AD";
NSString *test4 = @"0002-01-01 BC";

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];

[formatter1 setDateFormat: @"yyyy-MM-dd"];

NSLog(@"test 1 - %@", [formatter1 dateFromString: test1]);
NSLog(@"test 2 - %@", [formatter1 dateFromString: test2]);

NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];

[formatter2 setDateFormat: @"yyyy-MM-dd G"];

NSLog(@"test 3 - %@", [formatter2 dateFromString: test3]);
NSLog(@"test 4 - %@", [formatter2 dateFromString: test4]);

そしてそれはそれが返すものです:

2012-11-26 11:24:27.536 Test[1968:c07] test 1 - (null)
2012-11-26 11:24:28.615 Test[1968:c07] test 2 - 0001-12-31 22:21:00 +0000
2012-11-26 11:24:37.604 Test[1968:c07] test 3 - 0001-12-31 22:21:00 +0000
2012-11-26 11:24:45.738 Test[1968:c07] test 4 - 0003-12-31 22:21:00 +0000

ご覧のとおり、0000の日付ではnullを返し、他のバリアントでは間違った日付を返します。

4

1 に答える 1

0

ウィキペディアによると、ゼロ年は、グレゴリオ暦とその前身であるユリウス暦で年を数えるために通常使用される西暦紀元(AD)システムには存在しません。このシステムでは、紀元前1年の後にAD 1が続きます。ただし、天文学的年の番号付け(紀元前1年のユリウス年と一致する場合)およびISO 8601:2004(グレゴリアン年と一致する場合)にはゼロ年があります。紀元前1年)、およびすべての仏教暦とヒンドゥー暦。

日付オブジェクトを正しくログに記録することはできません。stringFromDate関数を使用して、取得した日付を文字列に変換し、出力をログに記録してみてください。

于 2013-05-24T04:04:00.447 に答える