如何在没有小时,分钟和秒的情况下将当前日期(或任何日期)创建为NSDate?

我需要在没有小时,分钟和秒的情况下创建当前日期(或任何NSDate)的NSDate并将其作为NSDate保留,尽可能少的几行?

我需要对日期执行一些计算,并且由于小时,分钟和秒钟会导致问题,我需要绝对日期(我希望绝对是正确的短语)。 它适用于iPhone应用程序。

我正在创建[NSDate date]日期,它会增加小时,分钟和秒。 此外,我正在添加几个月的日期,我认为迎合日光节约,因为我在某些日期得到2300小时。

理想情况下,我需要一个函数来从NSDates创建绝对NSDates。

我知道我之前问了一个类似的问题,但我需要结束NSDate而不是字符串,我有点担心指定日期格式,例如yyyy等。

首先,您必须了解即使您从NSDate删除小时,分钟和秒,它仍将代表一个时刻。 你永远不会得到一个NSDate代表整个一天,如2011-01-28 ; 它永远是2011-01-28 00:00:00 +00:00 。 这意味着您还必须考虑时区。

这是一个方法(作为NSDate类实现),它在与self同一天的UTC午夜返回NSDate

 - (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; } 
 NSDate *oldDate = [NSDate date]; NSCalendarUnit requiredDateComponents = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents *components = [[NSCalendar currentCalendar] components:requiredDateComponents fromDate:oldDate]; NSDate *newDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 
Interesting Posts