Help! Bug in NSDate! discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Hallo iedereen, Snap er niks van, ben met deze schijnbare bug al uren zoet mee. Hopelijk kan iemand mij helpen. Achtergrond Ben een kalender aan ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
NSDate [Solved]
Hallo iedereen,
Snap er niks van, ben met deze schijnbare bug al uren zoet mee. Hopelijk kan iemand mij helpen. Achtergrond Ben een kalender aan het maken voor de iPhone. Bij de meeste dagen en maanden ging het goed maar ik stuitte op een specifieke datum waarbij er iets mis gaat. Code om het na te bootsen Code:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; [dateFormatter setLocale:locale]; [dateFormatter setDateFormat:@"d-M-yyyy h:m:s"]; NSDate *date = [dateFormatter dateFromString:@"25-10-2009 1:59:59"]; NSDate *dateBugged = [dateFormatter dateFromString:@"25-10-2009 2:0:0"]; NSLog ([date description]); NSLog ([dateBugged description]); [dateFormatter release]; [locale release]; Code:
2009-10-25 01:59:59 +0200 2009-10-25 02:00:00 +0100 Nu lijkt dit op het eerste gezicht nog geen probleem. Maar dit wordt wel een probleem als je je deze code bedenkt. Code:
NSDate *date = [dateFormatter dateFromString:@"25-10-2009 1:59:59"]; NSTimeInterval timeInterval = 86400; // 1 dag NSDate *dateBugged = [[[NSDate alloc] initWithTimeInterval:timeInterval sinceDate:date] autorelease]; Code:
2009-10-25 01:59:59 +0200 2009-10-26 00:59:59 +0100 Code:
2009-10-25 00:00:00 +0200 2009-10-25 23:00:00 +0100 Mogelijke eigen oplossing Een mogelijke oplossing is door het huidige tijdsverschil GMT+0200 te bewaren en mocht er een verschil komen in tijdszones. Het verschil in uren in code erbij te tellen. Dus in het geval van +0100. 2 - 1 = 1 * 86400 = 86400 + de tijd. Maar dit is wel erg lelijk. Vraag Op de een of andere vage reden, beweegt NSDate zich door een timezone. De vraag is, heeft iemand een idee waarom dit gebeurd? Antwoord Op 25 oktober 2009 gaat de wintertijd in. Blijf het raar vinden dat ze dan de GMT aanpassen, laat de GMT dan hetzelfde en doe gewoon een uurtje terug. Laatst gewijzigd door markvwijnen; 31-05-09 om 11:31. |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
Timmeh zou je dit topic willen verwijderen?
|
#3
|
|||
|
|||
edit
Ah ok, zomer/wintertijd probleem... Geen bug dus.. Dat ze de GMT aanpassen is op zich logisch, want dat is ook wat er feitelijk gebeurt. /edit Het lijkt op een bug in de timezone detectie in NSDateFormatter. Als je specifiek de timezone meegeeft werkt het wel goed: Code:
[dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm:ss z"]; NSDate *date = [dateFormatter dateFromString:@"25-10-2009 01:59:59 +0200"]; NSDate *dateBugged = [dateFormatter dateFromString:@"25-10-2009 02:00:00 +0200"]; Workaround: vraag je huidige timezone op en voeg die toe als je een datum wilt omzetten van string naar NSDate. Laatst gewijzigd door Myrdhin; 31-05-09 om 12:13. |
#4
|
||||
|
||||
Ik laat m staan, voor als iemand dezelfde gedachtengang maakt
__________________
iPhone 2G UK iOS 3.1.3 Jailbreak by RedSn0w / iPhone 4 32GB iOS 4.2.1 Jailbreak by RedSn0w MacBook Pro 15,4" OSX 10.6.6 / iMac 20" OSX 10.6.6 / iPad 3G 32GB iOS 4.2.1 Stuur me geen privé-berichten met vragen, ik negeer ze. Gebruik liever de zoekfunctie en de Wiki (Begrippen|Handleidingen)
|
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Bug op iPad | CptYanni | iPad algemeen | 5 | 03-01-11 00:14 |
Agenda bug | pjobse | iPhone algemeen | 3 | 07-12-10 11:27 |
Volgende dag selecteren (NSDate) | SkyTrix | Ontwikkelen voor iOS | 10 | 31-07-09 15:05 |
Bug in codeslot? | neht | iPhone algemeen | 4 | 21-04-09 17:06 |
|
|