2011-11-12 39 views
0

我試圖創建NSCalendar一個NSDate與NSDateComponents:NSCalendar和NSDateComponents返回意外日期

NSCalendar *calendar = [NSCalendar currentCalendar]; 
    [calendar setTimeZone:[NSTimeZone localTimeZone]]; 
    NSDateComponents *components = [[NSDateComponents alloc] init]; 
    [components setDay:[self.day intValue]]; 
    [components setMonth:[self.month intValue]]; 
    [components setYear:[self.year intValue]]; 
    self.date = [calendar dateFromComponents:components]; 

當這一天,一個月,一年是:2011年9月31日的NSDate的是10/1/2011。我在測試後爲NSCalendar設置了時區,但沒有更改NSDate。我也試過

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 

這給了我回來2011/9/30。任何人看到我計算這個錯誤的方式?

謝謝。

回答

3

那麼,9月31日真的是十月一號。

但是組件必須知道在哪個日曆中工作。以下代碼來自蘋果

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:6]; 
[comps setMonth:5]; 
[comps setYear:2004]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
    initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 
[comps release]; 
+0

不適用於我:請參閱http://stackoverflow.com/questions/18719644/nscalendar-months-range – giuseppe