6

我想通过给出当前日期来取第二天我使用的代码如下

+(NSDate *)getForDays:(int)days fromDate:(NSDate *) date {
    NSTimeInterval secondsPerDay = 24 * 60 * 60 * days;
        return [date addTimeInterval:secondsPerDay];
} 

这工作正常,但是当启用夏令时时,这会导致错误。启用夏令时时如何使这项工作。

4

3 回答 3

13

正如您所发现的,您现在所拥有的非常容易出错。它不仅会因夏令时更改而出错,而且如果您的用户使用的是非公历日历怎么办?那么,日子不是 24 小时长的。

相反,使用NSCalendarand NSDateComponentswhich 正是为此而设计的:

+ (NSDate *)getForDays:(int)days fromDate:(NSDate *)date
{
    NSDateComponents *components= [[NSDateComponents alloc] init];
    [components setDay:days];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    return [calendar dateByAddingComponents:components toDate:date options:0];
}
于 2009-07-07T19:17:09.467 回答
1

使用NSCalendar执行这样的计算。它不仅更有可能工作,而且您的代码也会更清晰。

于 2009-07-07T13:11:22.967 回答
-1

我不知道您在这里使用什么语言或系统,但我的建议是使用 UTC 时间来执行所有计算,并且仅在您显示它时使用本地时间。

大多数操作系统和语言在将 UTC 转换为本地时间时都会考虑时区和夏令时。

于 2009-07-07T09:22:08.130 回答