2014-03-14 77 views
0

我从约会到现在都有两个日期。我在NSString中分别存储了两个日期,分别是string1和string 2。现在我的问题是我想要这两个日期的差异。我的日期格式为04-Mar-201414-Mar-2014,我希望结果类似10IOS中的日期差异

+1

那么你尝试过什么? – Amar

+0

谢谢,但我可以知道downvote的原因吗? – user3401290

+0

我没有投票。但我认为其原因是缺乏信息/努力。 – Amar

回答

0

我认为,根据你的问题,我的假设是difference between two dates。你可以使用这个。

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd-MM-yyyy"]; 
NSDate *date1 = [dateFormat dateFromString:@"04-Mar-2014"]; 
NSDate *date2 = [dateFormat dateFromString:@"14-Mar-2014"]; 

NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1]; 

int numberOfDays = secondsBetween/86400; 

NSLog(@"There are %d days in between the two dates.", numberOfDays); 
+0

谢谢你,这是完美的答案是..谢谢Dude ..干杯! – user3401290

+3

由于他使用NSDateComponents,Damir179或Popeye提供的解决方案似乎更好。如果时间有变化(冬季/夏季)会怎样?你会得到一个错误的天数,因为你使用86400. – Larme

+0

@Larme你能否澄清它与他们的答案有什么不同?对此给出正确的解释。为什么要投降?如果你知道正确的答案,只需解释更多。 – Mani

1

三,你需要的方法是:

+ (NSDateFormatter *)dateFormatter 
{ 
    static NSDateFormatter *dateFormatter = nil; 

    if (dateFormatter == nil) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"YOUR_STRING_FORMAT"]; 
    } 

    [NSTimeZone resetSystemTimeZone]; 
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

    return dateFormatter; 
} 


+ (NSDate *)dateWithString:(NSString *)dateString 
{ 
    return [[self dateFormatter] dateFromString:dateString]; 
} 

- (NSInteger)distanceInDaysToDate:(NSDate *)date 
{ 
    NSDateComponents *components1 = [CURRENT_CALENDAR components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self]; 
    components1.hour = 0; 
    components1.minute = 0; 
    components1.second = 0; 

    NSDateComponents *components2 = [CURRENT_CALENDAR components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:date]; 
    components1.hour = 0; 
    components1.minute = 0; 
    components1.second = 0; 

    NSDate *date1 = [CURRENT_CALENDAR dateFromComponents:components1]; 
    NSDate *date2 = [CURRENT_CALENDAR dateFromComponents:components2]; 

    NSDateComponents *components = [CURRENT_CALENDAR components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0]; 

    return components.day; 
} 

如果移动他们进入的NSDate类最佳。

0

在保持NSDate对象是最好的解决方案,可以使用NSDateFormatter与相应地设置您的日期格式的格式字符串重新从字符串NSDate对象。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MMM-yy"]; 
[dateFormatter dateFromString:yourString]; 

然后你可以使用例如NSDatetimerIntervalSinceDate:方法和计算的差异。或者,您可以提取NSDateComponents并通过这种方式获得差异。

2

您可以使用下面给出的代码获得差异: -

NSString *start = @"2010-09-01"; 
NSString *end = @"2010-12-01"; 

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd"]; 
NSDate *startDate = [f dateFromString:start]; 
NSDate *endDate = [f dateFromString:end]; 
[f release]; 

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                fromDate:startDate 
                 toDate:endDate 
                options:0]; 
[gregorianCalendar release]; 

components现在持有的差异。

NSLog(@"%ld", [components day]); 

礼貌:-vikingosegundo

https://stackoverflow.com/a/4576575/1865424

1

你们两个日期是

NSString* str1 = @"04-Mar-2014"; 

NSString* str2 = @"14-Mar-2014"; 

现在转换两个日期中DD-MM-YYY如下

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

[dateFormat setDateFormat:@"dd-MM-yyyy"]; 

现在字符串转换成日期

NSDate *date1 = [dateFormat dateFromString:str1]; 

NSDate *date2 = [dateFormat dateFromString:str2]; 

计算两个日期之间的转换

NSTimeInterval distanceBetweenDates = [date2 timeIntervalSinceDate:date1]; 

double secondsInAnHour = 3600; 

NSInteger hoursBetweenDates = distanceBetweenDates/secondsInAnHour; 

NSInteger day = hoursBetweenDates/ 24; 

您的输出:10