IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Conversion String to Date


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut Conversion String to Date
    Bonjour,

    mon problème est le suivant :
    comment convertir un string en date
    la ligne s := '14.04.2020'; fonctionne
    mais pas la ligne s := 'mardi 14 avril 2020'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      fs: TFormatSettings;
      s: string;
      dt: TDateTime;
    begin
     
      fs := TFormatSettings.Create;
      fs.DateSeparator := '.';
      fs.ShortDateFormat := 'dd-mm-yyyy';
      fs.LongDateFormat := 'dddd dd mmmm yyyy';
      fs.LongDayNames[1] := 'samedi';
      fs.LongDayNames[2] := 'dimanche';
      fs.LongDayNames[3] := 'lundi';
      fs.LongDayNames[4] := 'mardi';
      fs.LongDayNames[5] := 'mercredi';
      fs.LongDayNames[6] := 'jeudi';
      fs.LongDayNames[7] := 'vendredi';
     
      s := '14.04.2020';           // fonctionne
      s := 'mardi 14 avril 2020';  // ne fonctionne pas
     
      dt := StrToDateTime(s, fs);
     
      edLigne.Text := s;
      edExtract.Text := DateToStr(dt,fs);
     
    end;

  2. #2
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Malheureusement, je pense que tes espaces seront supprimés au moment du "StrToDateTime"
    tu peux contourner en remplaçant dans ta chaîne de départ, les espaces par des '.', comme tu l'as utilisé comme séparateur.

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 330
    Points
    11 330
    Billets dans le blog
    6
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par blonde Voir le message
    Malheureusement, je pense que tes espaces seront supprimés au moment du "StrToDateTime"
    tu peux contourner en remplaçant dans ta chaîne de départ, les espaces par des '.', comme tu l'as utilisé comme séparateur.
    déjà testé, ça génère toujours la même erreur

  5. #5
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    toujours la même erreur

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 367
    Points : 3 138
    Points
    3 138
    Par défaut
    Bonjour,

    pourquoi tu ne converti pas tout simplement 'mardi 14 avril 2020' en '14.04.2020' à l'aide d'une petite fonction ?

    A+
    Charly

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    pourquoi tu ne converti pas tout simplement 'mardi 14 avril 2020' en '14.04.2020' à l'aide d'une petite fonction ?

    A+
    Charly
    je sais le faire, mais alors à quoi peut bien servir le TFormatSettings...

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    FormatSettings sert justement parce que selon le pays, la ShortDate est différente
    FR : DD/MM/YYYY
    EN : MM/DD/YYYY
    JP : YYYY-MM-DD ... (le format le plus informatiquement intelligent, ils sont forts les japonais)

    C'est clairement écrit dans la documentation

    S doit être constitué de deux ou trois nombres séparés par le caractère défini dans la variable globale DateSeparator ou son équivalent TFormatSettings. La séquence jour/mois/année est déterminée par la variable globale ShortDateFormat ou son équivalent TFormatSettings. Les combinaisons possibles sont M/J/A, J/M/A et A/M/J.

    Par contre, ta fonction, je sais qu'elle existe sur le forum, on a eu la même demande, il y a un an, faudrait la retrouver !
    EDIT : Trouvée FormatedDateToDate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      sDT, sSFD, sFmt: string;
      dtV: TDateTime;
      FS: TFormatSettings;
    begin
      sDT := 'mardi 14 avril 2020';
      sFmt := 'dddd dd mmmm yyyy';
      sSFD := SimplifyFormatedDate(sDT, sFmt);
      FS := TFormatSettings.Create();
      FS.ShortDateFormat := sFmt;
      dtV := StrToDate(sSFD, FS);
      ShowMessage(sDT + sLineBreak + sSFD + sLineBreak + DateToStr(dtV));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    j'avais lu le poste concernant la fonction "SimplifyFormatedDate",
    mais en fait mon propos n’était pas de reformaté mon texte en date avant la conversion par StrtoDate mais bien de passer le TFormatSetting comme paramètre de conversion.
    Chose qui ne peut pas fonctionner au regard de la citation de la doc que tu viens de me passer.

    je conclu donc que la fonction StrtoDate se limite au ShortDateFormat et ne prend pas en charge le LongDateFormat.

    Merci pour ces éclaircissements.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Note que SimplifyFormatedDate simplifie la Date (en texte) mais aussi le Format pour ramener a ce que supporte le ShortDateFormat

    Tu peux donc créer une StrToDateEx qui prend en charge le LongDateFormat pour produire le ShortDateFormat et ainsi traduire la Date (en texte)
    A voir ce que tu peux ajouter comme controle dans StrToDateEx , soit en amont en analysant le LongDateFormat, soit via un DateToStr pour vérifier si l'entrée et la sortie sont en phase
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    en effet, c'est ce que je compte faire.
    la prochaine fois je lirais un peu plus la doc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertion String en Date - Message d'erreur
    Par marion77 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 28/05/2018, 17h29
  2. Convertion String to Date dans une requete
    Par kasdo dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 14/10/2015, 21h19
  3. Convertion string en date
    Par miabi dans le forum Développement
    Réponses: 4
    Dernier message: 13/01/2012, 09h46
  4. Convert String to Date
    Par bibouex dans le forum MS SQL Server
    Réponses: 15
    Dernier message: 18/05/2011, 15h47
  5. hql: convertion de string en date
    Par osoumayaj dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/01/2007, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo