2013-11-03 97 views
1

這可能是一個簡單的解決方案,但是有誰知道如何推遲NSDate在午夜之後的變化?任何見解都會非常有幫助,謝謝!NSDate延遲日期變更

編輯: 我目前正在以這種方式獲取日期並顯示基於當天的位置數據。但是,很像NSDate邏輯上應該工作,它切換到第二天午夜。我希望日期在凌晨3點改變,而不是在凌晨12點改變。

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"EEEE"]; 
today = [f stringFromDate:[NSDate date]]; 

我應該使用時間而不是使用NSDate嗎?我對iOS很有興趣,所以任何見解都會有所幫助。感謝您的迴應。

+0

改變你的時區... – Floris

+0

你能解釋一下你的意思嗎?我不希望星期六轉到星期天,直到凌晨3點或任何特定的時間。所以基本上我想將日期變化抵消幾個小時。 – chackerman

+2

這不是日期在現實世界或iOS中的工作方式。你需要加入一些邏輯來檢查時間。 – Kevin

回答

2

我必須承認,我還不明白爲什麼要顯示「錯誤」平日 的名字,但下面的代碼應該做你想要什麼。這只是 實現您的任務的各種方式之一。

轉換日期爲 「最新組件:」

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit; 
NSDateComponents *comp = [cal components:unitFlags fromDate:[NSDate date]]; 

減法如果有一天需要:

if (comp.hour < 3) { 
    comp.day -= 1; 
} 

轉換調整組件回日期:

NSDate *adjustedDate = [cal dateFromComponents:comp]; 

你的原代碼,現在使用調整日期:

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"EEEE"]; 
NSString *today = [f stringFromDate:adjustedDate]; 
+0

謝謝!這個工作很完美。是一個顯示酒吧特色菜,小時等等的應用程序,我希望我們的用戶在當天打開特色菜的應用程序,這顯然已經過了午夜。 – chackerman