dre*_*lax 229
NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];
NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
int numberOfDays = secondsBetween / 86400;
NSLog(@"There are %d days in between the two dates.", numberOfDays);
Run Code Online (Sandbox Code Playgroud)
请记住,NSDate对象代表精确的时刻,它们没有任何相关的时区信息.当您使用例如一个字符串转换为一个日期NSDateFormatter,该NSDateFormatter转换时间从配置的时区.因此,两个NSDate对象之间的秒数始终与时区无关.
此外,此文档指定Cocoa的时间实现不考虑闰秒,因此如果您需要这样的准确性,您将需要推出自己的实现.
Cas*_*ser 83
你可能想要使用这样的东西:
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
Run Code Online (Sandbox Code Playgroud)
我相信这种方法可以解决诸如夏令时变化的日期等情况.
Che*_*tan 24
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds
Run Code Online (Sandbox Code Playgroud)
其中,date1和date2是NSDate的.
另外,请注意以下定义NSTimeInterval:
typedef double NSTimeInterval;
Run Code Online (Sandbox Code Playgroud)
Ank*_*ain 19
看看这个.它使用iOS日历来计算夏令时,闰年.您可以将字符串和条件更改为包含小时和天的分钟.
+(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate
{
NSDateComponents *components;
NSInteger days;
NSInteger hour;
NSInteger minutes;
NSString *durationString;
components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute fromDate: startDate toDate: endDate options: 0];
days = [components day];
hour = [components hour];
minutes = [components minute];
if(days>0)
{
if(days>1)
durationString=[NSString stringWithFormat:@"%d days",days];
else
durationString=[NSString stringWithFormat:@"%d day",days];
return durationString;
}
if(hour>0)
{
if(hour>1)
durationString=[NSString stringWithFormat:@"%d hours",hour];
else
durationString=[NSString stringWithFormat:@"%d hour",hour];
return durationString;
}
if(minutes>0)
{
if(minutes>1)
durationString = [NSString stringWithFormat:@"%d minutes",minutes];
else
durationString = [NSString stringWithFormat:@"%d minute",minutes];
return durationString;
}
return @"";
}
Run Code Online (Sandbox Code Playgroud)