计算iOS中给定时间点之前的时间

时间:2011-04-18 11:42:31

标签: cocoa-touch ios nsdate

我想知道现在和下周三14:00之间的差异。

我发现[NSDate date];给了我当前的时间和日期,并且NSTimeInterval通常会用于此目的(我想在其他地方使用此间隔,并在某处否则想要一个NSTimeInterval),所以代码看起来像这样:

NSDate *now = [NSDate date];
NSDate *nextWednesday = ???;
// profit
NSTimeInterval secondsUntilNextWednesday = [nextWednesday timeIntervalSinceDate:now];

但我如何得到下周三的日期?

Edit2:我改进了方法,我仍然不喜欢它,但这是一个巨大的进步。而且,它更像是我的伪尝试。

- (NSTimeInterval)secondsUntilNextWednesday
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *today = [NSDate date];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate: today];
    // 17 == 15:00, seemingly. (timezones)
    [components setHour:17];
    [components setWeekday:4];
    NSDate *wednesday = [calendar dateFromComponents:components];
    NSTimeInterval secondsToWednesday = [wednesday timeIntervalSinceDate:today];
    // if secondsToWednesday is negative, it has already been wednesday, 15:00 (or 16:00 depending on DST)
    if (secondsToWednesday < 0)
    {
        secondsToWednesday += 604800;
    }
    return secondsToWednesday;
}

1 个答案:

答案 0 :(得分:1)

Apple提供了一本方便的指南,其中包含您需要了解的所有日期:Date and Time Programming Guide

您可能希望查看课程NSDateComponentsNSCalendar

参见日历,日期组件和日历单元&gt;在指南中创建组件的日期,以获取基于不同已知日期组件创建日期的示例。

该指南还显示了如何根据日期组件进行计算,以获得相对于当前日期的下一个星期三。