从佛教日历转换为格里高利历日历格式时,NSDateFormatter表现不正常

我正在制作一个支持将日历从佛教日历转换为格里高利的应用程序(注意:我正在测试的设备的“通用>国际>日历”设置是“佛教”。)。 但是,我无法弄清楚为什么NSDateFormatter不能正确解析我的日期。 这是我的代码:

NSDate *now = [NSDate date]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.calendar = gregorianCalendar; formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z"; NSString *formattedDate = [formatter stringFromDate:now]; NSDate *boomDate = [formatter dateFromString:formattedDate]; NSLog(@"now: %@, formattedDate (as string) > %@, boomDate (as date) > %@", now, formattedDate, boomDate); 

Xcode的日志说:

 now: 2556-05-23 07:11:03 +0000, formattedDate (as string) > 2013-05-23 15:11:03 +0800, boomDate (as date) > 2556-05-23 07:11:03 +0000 

当我将formattedDate (NSString)转换为NSDate时,为什么我的NSDateFormatter会根据佛教日历格式对其进行解析,即使我正确设置了它的属性(特别是formatter.calendar )。 我需要将我的formattedDate转换为具有公历日历格式的NSDate。 基于它的逻辑,我期待NSDateFormatter给我一个格里高利格式的日期,但事实并非如此。

基本上,我需要遵循佛教NSDate格里高利格式的NSDate。

有任何想法吗?

NSDate只是一个double值的对象包装器,表示与参考日期的偏移量。 它不包含有关日历或时区的信息。 这只是一个时间点。

我们作为人类决定称这个时间点取决于我们的日历和时区。 没有日历和时区,NSDate对象没有意义。

使用NSLog打印日期对象时,将调用日期对象上的-description方法, -description方法使用设备的语言环境格式化字符串。 这就是为什么boomDate显示佛教日历属性; 您的佛教地区使用佛教日历。

nowboomDate变量相等(尝试调用[now isEqualToDate:boomDate] )。

您可以判断转换为格里高利的成功,因为formattedDate显示的日期与格里高利历中的日期相同。