夏季后计算一天的NSDate

时间:2012-10-24 22:31:29

标签: objective-c ios nsdate

我刚刚在我的一个应用程序中找到了一个;问题是我正在使用initWithTimeIntervalSinceNow计算菜单中的天数并添加计算(day*X)X表示相关日期。)

然而,在CEST时区的10月27日到28日之间的夜晚将成为CET,这意味着一天的时间应该由(day*X)+3600计算。但是,我不想使用if case并相信应该有更好的方法来处理这个问题。

如何在考虑夏季/冬季时间的情况下计算未来的日子?

我的代码:

    int day = (60*60*24);
    NSDate *today = [NSDate date];
    NSDate *days1 = [[NSDate alloc] initWithTimeIntervalSinceNow:day];
    NSDate *days2 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*2)];
    NSDate *days3 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*3)];
    NSDate *days4 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*4)];
    NSDate *days5 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*5)];
    NSDate *days6 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*6)];
    NSDate *days7 = [[NSDate alloc] initWithTimeIntervalSinceNow:(day*7)];

2 个答案:

答案 0 :(得分:3)

试试这个:

- (NSDate *)dateByAddingXDaysFromToday:(int)days
{
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps.day = days;
    return [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:[NSDate date] options:0];
}

然后你可以使用:

NSDate *days1 = [self dateByAddingXDaysFromToday:1];
//etc...

答案 1 :(得分:0)

目前尚不清楚您计算日期对象的目的是什么。我假设您要创建引用接下来七天的对象,与现在相同。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:1];

NSDate *now = [NSDate date];
NSDate *days1 = [calendar dateByAddingComponents:components toDate:now options:0];
NSDate *days2 = [calendar dateByAddingComponents:components toDate:days1 options:0];
NSDate *days3 = [calendar dateByAddingComponents:components toDate:days2 options:0];
....