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

根据维基百科,在通常用于在公历及其前身儒略历中对年份进行编号的 Anno Domini (AD) 系统中不存在零年。在这个系统中,公元 1 年之后是公元前 1 年。但是,天文年编号(与儒略年 BC 一致)和 ISO 8601:2004(与公历年一致)中有零年1 BC)以及所有佛教和印度教日历。

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

于 2013-05-24T04:04:00.447 回答