2009-10-26 147 views
2

如何獲得本週的第一天和最後一天?我需要的是用NSDate屬性過濾一組對象的方式,只留下當前一週出現的對象,然後按天篩選它們。另外我需要一些方法來獲取本地化的日期名稱。獲取當週的第一天和最後一天

我試着玩NSCalendar,NSDate和NSDateComponents,但似乎我不能只檢查日曆的第一個週日,因爲可能會有前幾個月/下個月的幾個星期。

回答

0

好吧,這裏有雲,一個python片段,沒有工作

def daySec(diff): 
    return 60*60*24*diff 

def weekDays(dt=None): 
    if not dt: 
     dt = NSDate.date() # use today 
    cal = NSCalendar.currentCalendar() 
    dc = cal.components_fromDate_(NSWeekdayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit, dt) 
    normDt = cal.dateFromComponents_(dc) # get the day-rounded date 
    shift = dc.weekday() - cal.firstWeekday() 
    firstDt = normDt.dateByAddingTimeInterval_(daySec(-shift)) 
    lastDt = normDt.dateByAddingTimeInterval_(daySec(-shift+7)) # up to next week's first day midnight 
    return (firstDt, lastDt) 
+0

那是使用PyObjC嗎? http://pyobjc.sourceforge.net/ – 2009-10-26 19:23:39

+0

是的,它可以快速解決這些問題。使用ipython作爲shell,您可以快速獲得結果,並且不需要反覆寫入編譯運行循環。 – Farcaller 2009-10-26 20:54:11

+1

NSDateComponents方法將正確處理沒有60 * 60 * 24秒的日期。 – 2010-04-24 22:47:32

3

使用NSDateComponents拿到平日,這是從1日到7

一旦你的工作日數,計算它的區別,你的一週的第一天。例如,如果你認爲星期一(2)是第一天,那麼它會(或將是)多少天。如果工作日是4(星期三),則差值爲2.這意味着如果從原始日期減去兩天,您將獲得它所在的一週的第一天。

檢查documentation for details,因爲您需要處理這些對象還包含時間屬性的事實。如果可以,請確保時間值始終爲零,而您只對日期和日期比較感興趣。

+0

我怎樣才能從中獲得的NSDate?更確切地說,除了工作日之外,我還需要填寫哪些NSDateComponents字段,以便讓NSCalendar將其轉換爲第一個星期的NSDate? – Farcaller 2009-10-26 14:28:44

+0

在我的答案的文檔鏈接處選中「日曆,日期組件和日曆單位」。這很明顯。 – 2009-10-26 19:22:28

相關問題