Récupération de date

muqaddarmuqaddar Administrateur
21:36 modifié dans API AppKit #1
Salut,

Je récupère des dates sous forme de NSString dans un premier temps avec ce format :
[tt]lundi 7 mars 2005 20:13:16[/tt]

J'ai besoin de transformer cela en NSDate pour m'en servir pour comparer avec d'autres dates qui auront le même format.

Comme je récupère cette date depuis un logiciel FR, il faut que je prévois de récuperer d'autres formats de langue aussi...

Quelle est la meilleure solution qui s'offre à  moi ?

Moi je pense que le plus simple serait de transformer la date en UNIX_TIMESTAMP().

merci de vos suggestions

Réponses

  • 21:36 modifié #2
    Essaie ça:

    [tt]NSDate* date = [NSDate dateWithNaturalLanguageString:laDate locale:NSUserDefaults standardUserDefaults] dictionaryRepresentation];[/tt]
  • muqaddarmuqaddar Administrateur
    21:36 modifié #3
    Merci Renaud.

    Effectivement, ça me semble très bon.
    ça me renvoie ça : 2005-03-07 20:13:16 +0100

    :)
  • muqaddarmuqaddar Administrateur
    21:36 modifié #4
    Quelqu'un pourrait m'indiquer quelle est la constante que je n'ai pas trouvée dans la doc qui renvoie la date et l'heure du jour ?

    En php c'est time(); en mySQL c'est Now() mais en objective-C ? ;-)
  • 21:36 modifié #5
    Je vais finir par sortir des RTFM si ça continue. ;)

    [tt]NSDate* date = [NSDate date];[/tt]
  • muqaddarmuqaddar Administrateur
    21:36 modifié #6
    C'est mal fouttu cette doc, je me suis tappé toutes les constantes...

    Sinon, je sais pas ce que c'est un RTFM moi alors...
  • 21:36 modifié #7
    Ce sont les abbréviations de Read The Fine Manual (ou de manière très péjorative Read The Fucking Manual), qu'on sort généralement quand la réponse se trouve très facilement dans la doc. Pas tellement utilisé dans le monde mac, mais dans le monde Linux c'est plus courant.

    Et bête question, comme ça pourrait être une constante, vu que la date du moment évolue constamment ;)
  • muqaddarmuqaddar Administrateur
    21:36 modifié #8
    Ce que j'appelle une constante ds ce cas, c'est un mot "logique" comme Now() en mySQL. J'aurais préféré un "Today" ou autre... que "date" qui ne fait aucunement référence à  un moment précis.
  • mars 2005 modifié #9
    Ce dont tu parles là  sont en fait des fonctions, pas des constantes. Ici on est en POO, ce que tu cherches à  avoir est donc un objet donc il faut chercher dans la doc de la classe de l'objet. En gros, ici, les constantes ne sont là  que pour s'assurer que tu rentres un paramètre valide, comme par exemple [tt]NSFontAttributeName[/tt], qui vaut en fait [tt]@NSFont[/tt]. On a juste procédé de cette manière pour s'assurer que le compilo "rouspète" si on fait une faute de frappe dans le paramètre, ou dans le cas de constante de type int, qu'on mette une valeur valable.
  • ClicCoolClicCool Membre
    21:36 modifié #10
    dans 1111599076:

    Et bête question, comme ça pourrait être une constante, vu que la date du moment évolue constamment ;)


    Ben oui c'est ça la definition d'une constante !:

    Constante = constamment (en évolution)

    ;D ;D ;D
    OK je sors :)beta:
  • muqaddarmuqaddar Administrateur
    21:36 modifié #11
    dans 1111601130:

    Ce dont tu parles là  sont en fait des fonctions, pas des constantes. Ici on est en POO, ce que tu cherches à  avoir est donc un objet donc il faut chercher dans la doc de la classe de l'objet. En gros, ici, les constantes ne sont là  que pour s'assurer que tu rentres un paramètre valide, comme par exemple [tt]NSFontAttributeName[/tt], qui vaut en fait [tt]@NSFont[/tt]. On a juste procédé de cette manière pour s'assurer que le compilo "rouspète" si on fait une faute de frappe dans le paramètre, ou dans le cas de constante de type int, qu'on mette une valeur valable.


    N'empêche : date pour renvoyer la date du jour, ça n'est pas parlant comme je le disait plus, POO ou pas.
    Quand je regarde la liste des fonctions en haut de la doc, tu cherches unt ruc du genre "Now", pas "date", pourquoi date renverrait la date du jour ?
  • muqaddarmuqaddar Administrateur
    21:36 modifié #12
    Pourquoi je ne peux faire ceci :

    [NSDate dateWithNaturalLanguageString:[NSDate date] locale:NSUserDefaults standardUserDefaults] dictionaryRepresentation

    qui me renvoie un pb de length...

    [NSDate dateWithNaturalLanguageString:NSDate date] stringValue] locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation

    ne marche pas non plus...

    Je veux la date du moment en "local".
    Une idée ?
  • ClicCoolClicCool Membre
    21:36 modifié #13
    [NSUserDefaults standardUserDefaults]

    Concerne les préférences utilisateurs de ton application, pas les préférences de localisation du système.

    Il me semble que tu devrais pas avoir à  utiliser:
    + dateWithNaturalLanguageString:(NSString *)string locale:(NSDictionary *)localeDictionary

    mais tout simplement:
    + dateWithNaturalLanguageString:(NSString *)string
    this method uses the date and time preferences stored in the user's defaults database


    Evidemment si tu as pas localisé ton appli en français et que t'as pas de "French.lproj" tu obtiendras une date en anglais.
    En échange de quoi lorsque tu localiseras ton appli elle obtiendra bel est bien les bonnes localisations y compris en japonais si l'utilsateur a localisé sa bécanne dans ce langage ET que tu as inclus "Japanese.lproj".

    Enfin j'ai pas testé sur les dates mais ça me parrait être le comportement général ....
  • muqaddarmuqaddar Administrateur
    mars 2005 modifié #14
    C'est de l'arrachage de cheveux. :)

    Tu me conseilles de sauvedarder mes dates sous quel format ? Je suis dans le english.lproj, mais je récupère les dates en français de Mail... Si je décidais de passer sur système anglais, je voudrais que le fichier des dates restent exploitables...
    Je pense à  : dateWithTimeIntervalSince1970:
    qui renvoie le nombre de secondes depuis 1970...

    Ensuite, dateWithNaturalLanguageString attend une string, comment j'envoie en string [NSDate date], cf mon message plus haut ?
  • mars 2005 modifié #15
    dans 1111657119:

    [NSUserDefaults standardUserDefaults]

    Concerne les préférences utilisateurs de ton application, pas les préférences de localisation du système.


    Erreur! Cette classe inclus aussi des méthodes d'accès a certaines préférences systèmes, comme justement les termes localisés d'une date, les formats préférés de dates et d'heures (courts et longs), le symbole pour la monnaie, le séparateur décimal utilisé, le séparateur de milliers utilisés.

    Quant à  oxitan, on le répétera jamais assez RTFM ;) [tt]-descriptionWithNaturalLangageString:locale:[/tt] demande du NSString pour fonctionner, alors pourquoi tu vas mettre des NSDate? Quant à  [tt]-stringValue[/tt], c'est une méthode de NSNumber, NSControl, NSCell et NSAppleEventDescriptor, de nouveau dans la doc de NSDate (même pas la peine de remonter à  NSObject), il y a une rubrique qui s'appelle Representing dates as NSStrings et qui propose 3 méthodes, dont une qui est universelle (puisqu'elle est implémentée dans NSObject) qui est [tt]-description[/tt] (et ne me dis pas que tu ne l'as jamais utilisée dans un NSLog par exemple). J'ai l'impression que ton problème n'est pas le code, mais lire correctement la doc... Installe AppKiDo, c'est très pratique pour la parcourir.

    Sinon autre chose, si tu regardes le plist editor (pas de RTFM pour ça),  tu remarqueras que les dates sont prises en compte automatiquement, donc à  priori tu n'as pas à  te soucier de leur sauvegarde. Si ça ne marche pas (ce qui m'étonnerais), tu sauves avec un [tt]-description[/tt] et tu récupères avec [tt]+dateWithNaturalLanguageString:[/tt], comme ça tu les sauves dans un format standard, non lié à  une langue, ce qui fait que l'utilisateur pourra changer de langue s'il en a envie.
  • ClicCoolClicCool Membre
    21:36 modifié #16
    dans 1111659544:

    dans 1111657119:

    [NSUserDefaults standardUserDefaults]

    Concerne les préférences utilisateurs de ton application, pas les préférences de localisation du système.


    Erreur! Cette classe inclus aussi des méthodes d'accès a certaines préférences systèmes, comme justement les termes localisés d'une date, les formats préférés de dates et d'heures (courts et longs), le symbole pour la monnaie, le séparateur décimal utilisé, le séparateur de milliers utilisés.



    Ah!
    C'est là  que ça se passe ?
    Merci alors, parceque ça n'a jamais été bien clair pour moi c't'affaire.

    NSGlobalDomain

    The global domain contains defaults that are read from a user's defaults database and are applicable to all applications that a user runs. Many Application Kit and Foundation objects use default values from the NSGlobalDomain. For example, NSRulerView objects automatically use a user's preferred measurement units, as stored in the user's defaults database under the key AppleMeasurementUnits. Consequently, ruler views in all applications use the user's preferred measurement units"unless an application overrides the default by creating an AppleMeasurementUnits default in its application domain. Another NSGlobalDomain default, under the key AppleLanguages, allows users to specify a preference of languages as an array of strings. For example, a user could specify English as the preferred language, followed by Spanish, French, German, Italian, and Swedish.
  • mpergandmpergand Membre
    21:36 modifié #17
    On peut aussi récupérer les prefs d'une appli, ex iTunes:

    [userDefauts persistentDomainForName:@com.apple.iTunes];
  • ClicCoolClicCool Membre
    21:36 modifié #18
    dans 1111668062:

    On peut aussi récupérer les prefs d'une appli, ex iTunes:

    [userDefauts persistentDomainForName:@com.apple.iTunes];



    Tu as répondu avant que j'ai réalisé que je me posais la question !!  ???


    C'est ce qui s'appèle être [grilled] ça !  ;)
Connectez-vous ou Inscrivez-vous pour répondre.