[Résolu] Décalage horaire...

LeChatNoirLeChatNoir Membre, Modérateur
avril 2015 modifié dans API UIKit #1

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 ?


 


 


Réponses

  • Que donne exactement ton output? Tu n'aurais pas un -02:00 ou +02:00 ?


  • LeChatNoirLeChatNoir Membre, Modérateur

    begin date 2015-04-12 12:00:00 +0000


  • LeChatNoirLeChatNoir Membre, Modérateur

    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....

  • AliGatorAliGator Membre, Modérateur
    Bah oui c'est à  la bonne heure.
    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... ;))
  • DrakenDraken Membre
    avril 2015 modifié #6

    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.


  • AliGatorAliGator Membre, Modérateur
    Oui, mais ça ne changera pas que NSDate sera inchangé : un objet NSDate ne représente pas une date au sens commun où on l'entend, comme une heure dont on parlerait à  l'oral entre 2 collègues "nous sommes le 3/4 il est 15h", non faut pas le voir comme ça. A mon avis il faut + voir NSDate comme "un point fixe dans le temps", totalement indépendant du référentiel dans lequel ce point fixe est exprimé.

    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.
  • DrakenDraken Membre
    avril 2015 modifié #8

    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 :

  • AliGatorAliGator Membre, Modérateur
    avril 2015 modifié #9
    Bien sûr que non, aurais-tu oublié 22 avril 2011 à  17h02 ?
  • LeChatNoirLeChatNoir Membre, Modérateur

    je comprend rien à  vos délires.


    Arrêtez de polluer mon beau post utile >:)


  • DrakenDraken Membre
    avril 2015 modifié #11


    Bien sûr que non, aurais-tu oublié 22 avril 2011 à  17h02 ?




    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 !




  • je comprend rien à  vos délires.


    Arrêtez de polluer mon beau post utile >:)




    Mais que fait la police ? Tu devrais te précipiter dans une cabine téléphonique pour demander de l'aide !

  • Joanna CarterJoanna Carter Membre, Modérateur


    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  <3 </p>

  • Tu viens de te trahir, Joanna, tu n'es pas anglaise !



  • A mon avis il faut + voir NSDate comme "un point fixe dans le temps", totalement indépendant du référentiel dans lequel ce point fixe est exprimé.




     


    Oui mais bon, Einstein a démontré qu'il n'y a pas de temps absolu. Le temps dépend du référentiel !

  • LeChatNoirLeChatNoir Membre, Modérateur

    z'êtes encore sur Docteur Who ?



  • Le docteur ? C'est qui ? Il s'appelle comment ton gars ?

  • FKDEVFKDEV Membre
    avril 2015 modifié #18


     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.




     


    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. 


  • DrakenDraken Membre
    avril 2015 modifié #19


    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.




     


    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

Connectez-vous ou Inscrivez-vous pour répondre.