Compare two time values โ€‹โ€‹in ios?

In my application, I want to check if the current time is before or after the time stored in the variable.

as my time1 time1=@ "08:15:12"; , and my time is 2 time2=@ "18:12:8";

so I want to compare between time1 and time2.Currently these variables are in NSString format.

Below is the code used to get the time, and I don't know how to compare them.

CODE:

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"HH:MM:SS"; [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; NSLog(@"ewetwet%@",[dateFormatter stringFromDate:now]); 

Please help me

+7
ios time nsdate nsstring
source share
4 answers

Use the following code to convert from nsstring to nsdate and compare them.

 NSString *time1 = @"08:15:12"; NSString *time2 = @"18:12:08"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm:ss"]; NSDate *date1= [formatter dateFromString:time1]; NSDate *date2 = [formatter dateFromString:time2]; NSComparisonResult result = [date1 compare:date2]; if(result == NSOrderedDescending) { NSLog(@"date1 is later than date2"); } else if(result == NSOrderedAscending) { NSLog(@"date2 is later than date1"); } else { NSLog(@"date1 is equal to date2"); } 
+37
source share
 // Use compare method. NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *startDate = [formatter dateFromString:@"2012-12-07 7:17:58"]; NSDate *endDate = [formatter dateFromString:@"2012-12-07 7:17:59"]; if ([startDate compare: endDate] == NSOrderedDescending) { NSLog(@"startDate is later than endDate"); } else if ([startDate compare:endDate] == NSOrderedAscending) { NSLog(@"startDate is earlier than endDate"); } else { NSLog(@"dates are the same"); } // Way 2 NSTimeInterval timeDifference = [endDate timeIntervalSinceDate:startDate]; double minutes = timeDifference / 60; double hours = minutes / 60; double seconds = timeDifference; double days = minutes / 1440; NSLog(@" days = %.0f,hours = %.2f, minutes = %.0f,seconds = %.0f", days, hours, minutes, seconds); if (seconds >= 1) NSLog(@"End Date is grater"); else NSLog(@"Start Date is grater"); 
+5
source share

You can use the link

According to Apple NSDate documentation, compare:

 Returns an NSComparisonResult value that indicates the temporal ordering of the receiver and another given date. - (NSComparisonResult)compare:(NSDate *)anotherDate Parameters anotherDate The date with which to compare the receiver. This value must not be nil. If the value is nil, the behavior is undefined and may change in future versions of Mac OS X. Return Value If: The receiver and anotherDate are exactly equal to each other, NSOrderedSame The receiver is later in time than anotherDate, NSOrderedDescending The receiver is earlier in time than anotherDate, NSOrderedAscending 

In other words:

 if ([date1 compare:date2]==NSOrderedSame) ... 

Please note that it would be easier to read and write this:

 if ([date2 isEqualToDate:date2]) ... 

See Apple Documentation about this. If you feel any problem, you can also use this link here . Here you can find the answer of Nelson Brian.

I did this at my end as follows:

 NSDate * currentDateObj=@ "firstDate"; NSDate * shiftDateFieldObj=@ "SecondDate"; NSTimeInterval timeDifferenceBetweenDates = [shiftDateFieldObj timeIntervalSinceDate:currentDateObj]; 

You can also get the time interval according to the time difference between the dates. Hope this helps.

+1
source share

First you need to convert the time string to NSDate => Convert the time string to the iOS date format .

Then use the following code

 NSDate *timer1 =... NSDate *timer2 =... NSComparisonResult result = [timer1 compare:timer2]; if(result == NSOrderedDescending) { // time 1 is greater then time 2 } else if(result == NSOrderedAscending) { // time 2 is greater then time 1 } else { //time 1 is equal to time 2 } 
+1
source share

All Articles