iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   NSDate en NSDateformatter doen moeilijk (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/97696-nsdate-nsdateformatter-doen-moeilijk.html)

Nikooos 19-08-11 10:10

NSDate en NSDateformatter doen moeilijk
 
In een app die ik gemaakt heb, krijg ik de zonsopkomst en zonsondergang als 6:31 am en 8:55 pm en ik wil graag controleren of het op dit moment voor, tussen of na die tijden is.

Probleem is alleen dat dit mijn code hiervoor prima werkt in de simulator (iphone 4.2 en ook iPad 3.2) en ook op mijn iPhone 4 met de laatste beta van iOS 5. Maar niet op een echte iPad 4.2.1, iPhone 3G 3.1.3 en iPhone 3GS 4.1.

En ik kan er maar niet de vinger op leggen wat hier nu het probleem is...

Dit is mijn code:

Code:

    NSLog(@"up: %@",appDelegate.sunup);
    NSLog(@"down: %@",appDelegate.sunset);

// today
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *currentDate = [dateFormatter stringFromDate:today];
   
    NSString *dateStr = [NSString stringWithFormat:@"%@ %@",currentDate,appDelegate.sunset];
    NSDateFormatter* formatterDate = [[[NSDateFormatter alloc] init] autorelease];
    [formatterDate setDateFormat:@"yyyy-MM-dd h:mm a"];
    NSDate *dateDB = [formatterDate dateFromString:dateStr];
   
    NSString *dateStr1 = [NSString stringWithFormat:@"%@ %@",currentDate,appDelegate.sunup];
    NSDate *dateDB1 = [formatterDate dateFromString:dateStr1];
   
    NSLog(@"up: %@",dateStr1);
    NSLog(@"down: %@",dateStr);
   
    NSDateFormatter *dateFormatter1 = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd h:mm a"];
    NSDate *checkDate = [dateFormatter1 dateFromString:dateStr];
    NSDate *sunupDate = [dateFormatter1 dateFromString:dateStr1];
   
    NSLog(@"up: %@",sunupDate);
    NSLog(@"down: %@",checkDate);

In de simulator (iPad 3.2) krijg ik de volgende output
Code:

up: 6:31 am
down: 8:55 pm
up: 2011-08-19 6:31 am
down: 2011-08-19 8:55 pm
up: 2011-08-19 06:31:00 +0200
down: 2011-08-19 20:55:00 +0200

Op mijn device (iPad 4.2.1) krijg ik de volgende output
Code:

up: 6:31 am
down: 8:55 pm
up: 2011-08-19 6:31 am
down: 2011-08-19 8:55 pm
up: (null)
down: (null)

Heeft iemand een idee wat het probleem kan zijn?

---------- Bericht automatisch samengevoegd op 19 augustus 2011 om 10:31 ----------

Blijkbaar zelf inmiddels een oplossing gevonden. Al in het eerste stadium haal ik de am en pm van de tijd af en ga daar dus ook niet mee door. In mijn geval toch niet noodzakelijk omdat in NL de zon altijd onder gaat na de middag en voor de middag al opkomt.

Maar ik ga nog even verder testen. Misschien moeten die am en pm in hoofdletters zijn en kan hij er niet mee omgaan als het geen hoofdletters zijn?

fabie1 19-08-11 10:40

Probeer even gewoon zoals je het nu hebt maar stel de locale in, voeg dit even toe:
Code:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter1 setLocale:locale];

gebruik ook wel die en_US, soms werkt het niet met anderen.
Dit kan het verschil met de sim en device zijn.

succes ermee!


Alle tijden zijn GMT +2. Het is nu 10:22.