首页 文章

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

提问于
浏览
6

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

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

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

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

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

2 回答

  • 32

    首先,您必须明白,即使您从 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;
    }
    
  • 2
    NSDate *oldDate = [NSDate date];
    NSCalendarUnit requiredDateComponents = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit;    
    NSDateComponents *components = [[NSCalendar currentCalendar] components:requiredDateComponents fromDate:oldDate]; 
    NSDate *newDate = [[NSCalendar currentCalendar] dateFromComponents:components];
    

相关问题