J'ai un morceau de code qui a fonctionné dans le passé (du moins je pense que c'était le cas car sinon le problème aurait été reconnu plus tôt). Depuis quelques semaines, pourrait être depuis DST, il a commencé à produire des résultats incorrects.Fuseau horaire Problème avec DST (le mystérieux manquant deux heures)
Cet extrait est censé générer un objet NSDate se référant au premier jour de la semaine des dates données à 00: 00h.
NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDayDate;
unsigned yearAndWeek = NSTimeZoneCalendarUnit | NSYearCalendarUnit | NSWeekCalendarUnit;
// retrieve the components from the current date
NSDateComponents *compsCurrentDate = [gregorianCalender components:yearAndWeek fromDate:date];
[compsCurrentDate setWeekday:2]; // Monday
[compsCurrentDate setHour:0];
[compsCurrentDate setMinute:0];
[compsCurrentDate setSecond:0];
// make a date from the modfied components
firstDayDate = [gregorianCalender dateFromComponents:compsCurrentDate];
NSLog(@"MONDAY: %@", firstDayDate);
Aujourd'hui est le 24 mai donc la dernière ligne devrait imprimer quelque chose comme
MONDAY: 2011-05-23 00:00:00 +0000
mais il imprime vraiment la
suivanteMONDAY: 2011-05-22 22:00:00 +0000
ce qui est évidemment faux. Le 22 mai était dimanche dernier. Maintenant, pour faire des choses étranges, le résultat est correct à nouveau quand je change la setHour:0
à
[compsCurrentDate setHour:2];
Je pense, qu'il ya quelque chose de mal sur les fuseaux horaires. Mais après avoir passé une demi-journée sur la documentation d'Apple, google et stackoverflow je n'ai pas pu comprendre quel est le problème. Peut-être que j'utilise les mauvais mots-clés ou que je suis le seul à avoir ce problème.
Toutes les informations sont très appréciées! S'il vous plait, faite moi part de votre avis! Je vous remercie!