iPhone-dev: Hur jämföra två NSDate med varandra?

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1

Jag har ett schema i en plist-fil jag läser in olika tider från det, nu vill jag jämföra aktuell tid med dessa tider.
T.ex.
Från plist-fil: 10:00
Aktuell tid: 9:11

Jag har tider för hela dygnet, jag vill att när tiden inträffar så ska det triggas så en bild byts i appen (kollen körs bara när appen är igång eller startas).

Jag tror jag måste cast:a om mina strängar till något slags date-object men det är nu jag inte riktigt fattar hur jag ska göra.
Jag ställde frågan på stackoverflow och fick ett svar som är rätt, tror jag, det är taget ur Apples dokumentation för NSDate, men jag kommer inte runt hur jag ska implementera det.

Så här blev det:

NSDateFormatter *formattedTime = [[NSDateFormatter alloc] init];
	[formattedTime setDateFormat:@"HH:mm"];

	NSDate *now = [[NSDate alloc] init];
	
	NSString *currentTime = [formattedTime stringFromDate:now];
	NSString *scheduledTime = @"12:00";

	[formattedTime release];
	[now release];
	
	NSComparisonResult result = [currentTime compare:scheduledTime];

	switch (result)
	{
		case NSOrderedAscending: NSLog(@"%@ is before %@", currentTime, scheduledTime); break;
		case NSOrderedDescending: NSLog(@"%@ is after %@", currentTime, scheduledTime); break;
		case NSOrderedSame: NSLog(@"%@ is same %@", currentTime, scheduledTime); break;
		default: NSLog(@"erorr dates %@, %@", currentTime, scheduledTime); break;
	}

Tack ciryon för att du pekade mig i rätt riktning.

  • Medlem
  • 2010-11-02 18:40

Jag tycker nog det är bättre att konvertera din scheduledTime till ett faktiskt datumobjekt m.h.a. NSDateFormatter i.st.f. att konvertera datum till en sträng.

Det fungerar säkert att jämföra strängarna också (om jag nu tänker rätt), men det känns naturligare att omvandla scheduledTime till en NSDate och jämföra två NSDate.

NSDate *scheduledDate = [formattedTime dateFromString:scheduledTime];

NSComparisonResult result = [now compare:scheduledDate];

[formattedTime release];
[now release];

switch (result)
{
case NSOrderedAscending: NSLog(@currentTime is before scheduledTime); break;
case NSOrderedDescending: NSLog(@currentTime is after scheduledTime); break;
case NSOrderedSame: NSLog(@currentTime is same scheduledTime); break;
default: NSLog(@error); break;
}

1
Bevaka tråden