2011-01-28 48 views
6

我需要在沒有小時,分鐘和秒的情況下創建當前日期(或任何NSDate)的NSDate,並將其保留爲NSDate,儘可能少的行數?如何創建當前日期(或任何日期)作爲NSDate而不需要小時,分鐘和秒鐘?

我需要對日期進行一些計算,並有小時,分鐘和秒鐘導致問題,我需要絕對日期(我希望絕對是正確的短語)。它的iPhone應用程序。

我使用[NSDate date]創建日期,添加小時,分鐘和秒鐘。此外,我還將月份添加到日期中,因爲我在某些日期獲得了2300小時,所以我認爲這可以節省一天的光照。

因此理想情況下,我需要一個函數來創建NSDates的絕對NSDates。

我知道我之前問過類似的問題,但我需要以NSDate結束而不是一個字符串,我有點關心指定日期格式,例如yyyy等

回答

32

首先,您必須明白,即使您從NSDate中剝離小時,分鐘和秒鐘,它仍然會代表一個時刻。你永遠不會得到一個NSDate代表像2011-01-28一整天;它將始終是2011-01-28 00:00:00 +00:00。這意味着你也必須考慮時區。

這裏有一個方法(被實現爲NSDate類別),在午夜UTC在同一天返回NSDateself

- (NSDate *)midnightUTC { 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    [calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

    NSDateComponents *dateComponents = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit 
                fromDate:self]; 
    [dateComponents setHour:0]; 
    [dateComponents setMinute:0]; 
    [dateComponents setSecond:0]; 

    NSDate *midnightUTC = [calendar dateFromComponents:dateComponents]; 
    [calendar release]; 

    return midnightUTC; 
} 
+1

始終奧萊,打我的答案! ;( 一如既往的好答案 – 2011-01-28 20:16:25

2
NSDate *oldDate = [NSDate date]; 
NSCalendarUnit requiredDateComponents = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit;  
NSDateComponents *components = [[NSCalendar currentCalendar] components:requiredDateComponents fromDate:oldDate]; 
NSDate *newDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 
相關問題