[Résolu] Décalage horaire...
LeChatNoir
Membre, Modérateur
Je veux calculer le dimanche de la semaine prochaine, 14h :
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[calendar setLocale:[NSLocale currentLocale]];
NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekday fromDate:now];
NSDateComponents *nowComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:now];
[nowComponents setWeekday:1]; //Sunday
[nowComponents setWeekOfYear:[nowComponents weekOfYear] + 1]; //Next week
[nowComponents setHour:14]; //2p.m.
[nowComponents setMinute:0];
[nowComponents setSecond:0];
NSDate *beginningOfWeek = [calendar dateFromComponents:nowComponents];
NSLog(@begin date %@",beginningOfWeek);
Ca me donne bien dimanche 12 avril mais 12h...
WTF ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Que donne exactement ton output? Tu n'aurais pas un -02:00 ou +02:00 ?
begin date 2015-04-12 12:00:00 +0000
Ok ne cherchez plus... C'est NSLog qui n'affiche pas l'heure.... Il faut mettre un NSDateFormatter pour voir l'heure d'une date....
C'est juste que le debugDescription d'une NSDate affiche toujours l'heure dans la TimeZone GMT et pas dans la currentTimeZone (histoire de faciliter les comparaisons d'heures etc)
Donc la date affichée par le NSLog est tout à fait correct.
2015-04-12 12:00:00 +0000 c'est 12h GMT donc c'est bien 14h en France.
(C'est fou le nombre de personnes qui s'emmêlent les pinceaux avec les NSDates et le nombre de fois qu'on a à expliquer cela... )
Et ça vas empirer ... En 2145, iOS 95 vas devoir tenir compte des fuseaux horaires de la Lune, de Mars, de Vénus et des 27 astéroà¯des terraformés ayant chacun leurs propres cycles jour/nuit.
C'est un peu comme des coordonnées, si vous voulez décrire un point dans l'espace et que vous donnez des coordonnées, mais ne précisez pas le référentiel, ça n'a aucun sens. Un CGPoint n'est pas indépendant du référentiel dans lequel il exprime ses coordonnées.
Une NSDate elle est indépendante du fuseau horaire dans lequel elle est exprimée. Quand quelqu'un à Paris appelle au téléphone qqn à NewYork, l'appel se passe à une NSDate donnée. Que l'on exprime cette NSDate comme "le 3/4 à 03h00 heure de Paris" ou "le 2/4 à 22h00 heure de New York" n'y change rien, c'est le même moment. De même que quand on a changé d'heure le WE dernier, l'instant qui précédait le changement d'heure et celui qui l'a suivi n'ont bien été espacé que d'une seconde, pas de 1h, et une NSDate est capable d'exprimer tous les instants de la flèche du temps, indépendamment de cette représentation dépendante de si on est en heure d'été ou heure d'hiver.
Il ne faut pas se référer à la représentation "human-readable" d'une NSDate en fonction du fuseau horaire, mais voir cette NSDate comme un point fixe dans le temps, qu'on peut exprimer de façon indépendante du fuseau horaire en l'exprimant sous forme de timestamp UNIX (secondes écoulées depuis 1970), ou encore de son expression dans un fuseau horaire fixe, par convention GMT (aussi appelé Zulu Time, UTC, Temps de référence). Toutes ses autres représentations ne sont que ça, des représentations, tout comme un même concept peut être exprimé avec un mot différent selon la langue dans laquelle on parle, il n'empêche que c'est le même sens derrière.
Je suis désolé de te contredire, Ali, mais un point fixe dans le temps ça peut évoluer dans le temps. La preuve en image :
je comprend rien à vos délires.
Arrêtez de polluer mon beau post utile
Bin oui, justement j'ai oublié. Et je ne sais pas pourquoi, d'ailleurs. Je n'arrive jamais à m'en souvenir. C'était quand, déjà ? Ah oui c'est maintenant..
D'ailleurs c'était le 22 avril hier aussi, et avant-hier, et demain, et aprés-demain. Donc j'ai raison, un point fixe dans le temps ça peut varier dans le temps !
Mais que fait la police ? Tu devrais te précipiter dans une cabine téléphonique pour demander de l'aide !
La police, c'est moi ; et j'arrive avec extincteur pour éteindre les dragons méchants </p>
Tu viens de te trahir, Joanna, tu n'es pas anglaise !
Oui mais bon, Einstein a démontré qu'il n'y a pas de temps absolu. Le temps dépend du référentiel !
z'êtes encore sur Docteur Who ?
Le docteur ? C'est qui ? Il s'appelle comment ton gars ?
Les mots ont souvent un sens légèrement différent selon les langues ou même selon l'époque dans une même langue.
Un exemple plus courant et moins contestable : les représentations des nombres.
Si vous avez autant de doigts que la plupart des humains vous en avez :
| | | | | | | | | | en unaire
1010 en binaire
10 en décimal
A en hexadécimal
â…© en chiffres romains
etc
Déjà ce simple exemple porte souvent à confusion chez les développeurs qui veulent convertir un nombre de l'hexa en binaire alors que c'est le même nombre, c'est juste la manière de l'écrire qui change.
Le sens des chiffres varient énormément selon la culture. Le chiffre 8 ne signifie pas grand chose chez nous, alors qu'il est si important à Ankh-Morpork !
http://fr.wikipedia.org/wiki/Symbolisme_des_nombres