我想通过给出当前日期来取第二天我使用的代码如下
+(NSDate *)getForDays:(int)days fromDate:(NSDate *) date {
NSTimeInterval secondsPerDay = 24 * 60 * 60 * days;
return [date addTimeInterval:secondsPerDay];
}
这工作正常,但是当启用夏令时时,这会导致错误。启用夏令时时如何使这项工作。
我想通过给出当前日期来取第二天我使用的代码如下
+(NSDate *)getForDays:(int)days fromDate:(NSDate *) date {
NSTimeInterval secondsPerDay = 24 * 60 * 60 * days;
return [date addTimeInterval:secondsPerDay];
}
这工作正常,但是当启用夏令时时,这会导致错误。启用夏令时时如何使这项工作。
正如您所发现的,您现在所拥有的非常容易出错。它不仅会因夏令时更改而出错,而且如果您的用户使用的是非公历日历怎么办?那么,日子不是 24 小时长的。
相反,使用NSCalendar
and NSDateComponents
which 正是为此而设计的:
+ (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];
}
使用NSCalendar执行这样的计算。它不仅更有可能工作,而且您的代码也会更清晰。
我不知道您在这里使用什么语言或系统,但我的建议是使用 UTC 时间来执行所有计算,并且仅在您显示它时使用本地时间。
大多数操作系统和语言在将 UTC 转换为本地时间时都会考虑时区和夏令时。