Iphone IOS 4.1 NSDATE组件提供的日期与IOS的更高版本不同

Iphone IOS 4.1 NSDATE组件提供的日期与IOS的更高版本不同,iphone,ios4,nsdate,Iphone,Ios4,Nsdate,我已经创建了一个NSDate类别,可以给我一个“上周日”的日期 这给了我几个不同的日期: IOS 4.2 Sunday: 0001-08-28 05:50:36 +0000 IOS 4.1 Sunday: 0001-09-04 05:50:36 GMT 注意 IOS 4.1给了我一个未来的日期,而IOS 4.2给了我一个以前的日期,这正是我想要的 我知道显示年份为0001,但未使用年份 我还没有发现其他人在哪里有同样的问题,所以也许我做错了什么。但是,我不确定那是什么。以前有人见过这个吗 编

我已经创建了一个NSDate类别,可以给我一个“上周日”的日期

这给了我几个不同的日期:

IOS 4.2

Sunday: 0001-08-28 05:50:36 +0000
IOS 4.1

Sunday: 0001-09-04 05:50:36 GMT
注意 IOS 4.1给了我一个未来的日期,而IOS 4.2给了我一个以前的日期,这正是我想要的

我知道显示年份为0001,但未使用年份

我还没有发现其他人在哪里有同样的问题,所以也许我做错了什么。但是,我不确定那是什么。以前有人见过这个吗

编辑 这是我的工作代码:

+(NSDate *)sunday{
  NSCalendar *gregorian   = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
  NSDate *now = [NSDate date];
  NSDateComponents *components = [gregorian components:(NSWeekCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit ) fromDate:now];
  [components setWeekday:[gregorian firstWeekday]]; //Sunday
  [components setHour:0]; 
  [components setMinute:0];
  [components setSecond:0];
  return [gregorian dateFromComponents:components];
}

谢谢

您可能应该重新考虑您关于不使用年份的断言。当然,2011-09-04和(根据NSGregorianCalendar对1582-10-15之前的日期使用的儒略历法)0001-09-04都是星期天,所以看起来没关系。但明年它将不匹配


您在两台设备上的不同结果的问题很可能是您的设备被设置到不同的区域,对于哪一天是一周的第一天或哪一周是一年的第一天,有不同的规则。您可以检查NSCalendar对象上的
firstWeekday
属性以确定第一个,而
minimumDaysInFirstWeek
将有助于后者。

谢谢,这很有效。我需要补充的一件事是“单位”。
+(NSDate *)sunday{
  NSCalendar *gregorian   = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
  NSDate *now = [NSDate date];
  NSDateComponents *components = [gregorian components:(NSWeekCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit ) fromDate:now];
  [components setWeekday:[gregorian firstWeekday]]; //Sunday
  [components setHour:0]; 
  [components setMinute:0];
  [components setSecond:0];
  return [gregorian dateFromComponents:components];
}