我正在尝试使用[[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
在两个不同的日期查看它们是否在同一天。但是,如果我的时区不同(例如,在德国的某个地方),即使日期明显相同,返回的天数也会不同。如果我使用NSYearCalendarUnit
代替NSEraCalendarUnit
在相同的日期,返回的值是相同的。
使用时唯一的问题NSYearCalendarUnit
它对于不同年份的同一天返回相同的值,并且如果两个日期属于不同年份,则确定两个日期之间的天数并不简单。
任何想法出了什么问题或者如何更容易地确定两个日期是否在同一天,或者确定它们之间的天数?
Example:
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date1 = [NSDate dateWithTimeIntervalSinceReferenceDate:300751200];
NSDate *date2 = [NSDate dateWithTimeIntervalSinceReferenceDate:300836062.388569];
NSLog(@"\nDate 1: %@\nDate 2: %@",date1,date2);
/*Output:
Date 1: 2010-07-14 00:00:00 +0200
Date 2: 2010-07-14 23:34:22 +0200
*/
int day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date1];
int day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date2];
NSLog(@"\nDay 1: %i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 733966
Day 2: 733967
*/
day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date1];
day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date2];
NSLog(@"\nDay 1:%i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 195
Day 2: 195
*/
提交了一个错误,但后来我检查了日期和时间编程指南 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1再次。如果您使用清单 13 中的代码(类似于您的代码),它的行为就会错误。但如果您使用清单 14,它将按预期工作。
编辑:从概念上讲,苹果是对的。耶稣基督(和其他人一样)诞生于绝对时间,与时区无关。因此,无论时区如何,新纪元都会在同一时间点开始。新年在每个时区的不同时间点发生。这可以解释 NSYearCalendarUnit 和 NSEraCalendarUnit 之间的差异。问题是,他们没有在文档中明确说明这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)