2011-01-28 96 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]; 
相关问题