2015-12-13 76 views
0

我瀏覽過了stackoverflow,但沒有一個解決方案沒有正常工作。 我想生成每月的天NSDate的陣列,這是我使用的代碼(年份和月份硬編碼現在):每月的每一天的NSDate

NSCalendar *c = [NSCalendar currentCalendar]; 
NSRange days = [c rangeOfUnit:NSCalendarUnitDay 
         inUnit:NSCalendarUnitMonth 
         forDate:today]; 

for (int i = 1; i <= days.length; i++) { 
    NSDateComponents *dc = [NSDateComponents new]; 
    [dc setYear:2015]; 
    [dc setMonth:12]; 
    [dc setDay:i]; 
    NSDate *d = [calendar dateFromComponents:dc]; 
    [arrayDates addObject:d]; 
} 

的問題是,第一對象將永遠是(上月最後一天):

2015-11-30 23:00:00 +0000 

,最後會(不是當月的最後一天) 2015-12-30 23:00:00 +0000

我試過設置不同的區域設置,日曆選項,但沒有幫助.. 有什麼想法?

謝謝

回答

1

這感覺就像一個時區/區域設置的問題。我不知道是否消失,如果你設定明確的語言環境,並在一天中的明確時間:

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

然後,當你創建的日期,是這樣的:

[dc setHour:12]; 

我認爲這是一個時區/區域設置問題的原因是因爲我在這裏嘗試了您的代碼,並且它第一次正確運行。

+0

您好!謝謝你的回答,但是當你設置月份:12,但是嘗試設置月份:11,你會得到31天,這是錯誤的,應該是30天。 – zevonja

+0

我期望這是因爲'days'是使用一個名爲'today'的變量來計算的,我想像的是今天 - 也就是12月的一天。 – TwoStraws

+0

你是絕對正確的,我需要一個明確的休息時間。謝謝! – zevonja