NSDateFormatter BC / AD发布日期

时间:2012-11-26 09:28:15

标签: objective-c ios cocoa-touch nsdateformatter

我正在试图弄清楚如何使用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,而其他变体则返回错误的日期。

1 个答案:

答案 0 :(得分:0)

根据wikipedia,Anno Domini(AD)系统中不存在零年,通常用于公历和其前身Julian日历中的年数。在这个系统中,公元前1年之后是公元1年。但是,天文年编号(与公元前1年的朱利安年份一致)和ISO 8601:2004(与格里高利年一致)的年份为零公元前1)以及所有佛教和印度教日历。

您无法正确记录日期对象。尝试使用stringFromDate函数将获得的日期转换为字符串并记录输出。