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

Jul*_*les 6 cocoa-touch objective-c nsdate ios

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

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

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

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

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

Ole*_*ann 32

首先,你必须明白,即使你从一个小时,几分钟和几秒开始NSDate,它仍然代表一个时刻.你永远不会得到NSDate像一整天的代表2011-01-28; 它永远都是2011-01-28 00:00:00 +00:00.这意味着您还必须考虑时区.

以下是一种方法(将作为NSDate类别实现),该方法NSDate在同一天的午夜UTC 返回self:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

  • 你不需要添加`[dateComponents setHour:0]; [dateComponents setMinute:0]; [dateComponents setSecond:0];`因为你在dateComponents var中没有这个组件,所以NSDate将在` 00:00:00 + 0000` (4认同)