Convertir Date String en Date Formatée Numérique

Bonjour à tous,
je bloque depuis quelques jour et j’ai beau chercher je ne trouve pas la solution.
Je cherche à transformer une Date au format String en Date Formatée Numérique.
Par exemple transformer :
1 février 2021 en 2021/02/01
13 mars 2022 en 2022/03/13
Si quelqu’un peut m’aider sur ce point car là, je suis bloqué.
Je precise que j’arrive bien a extraire la Date String dans une ListBox et que j’arrive à en faire ce que je veux sauf pour la transformation String->Numérique.

Merci à vous tous

on peut utiliser parseDate pour cela en API 1
https://documentation.xojo.com/api/deprecated/parsedate.html#parsedate
ou datetime en API 2
https://documentation.xojo.com/api/data_types/datetime.html#datetime-fromstring
cela transforme la date string en classe DateTime
ensuite on utilise sqldate pour le récupérer de la forme “2021-02-01”

1 Like

Bonjour et merci Jean-Yves pour votre aide.
J’ai deja lu l’aide de l’Api 2 (Api n’est plus utilisée depuis 2019 et j’utilise la version 2022 R1).
Cependant je ne vois pas comment passer mes Strings (voir exemple au debut) pour en sortir ces dates formatées justement.
Vous est til possible de me faire un exemple ?

Cordialement

Try:

var frenchlocale as new locale("fr-FR")
var sdate as String = "1 février 2021"
var dtnew as DateTime = DateTime.FromString(sdate, frenchlocale)
var sdatenew as string = dtnew.SQLDate.ReplaceAll("-","/") //2021/02/01
1 Like

Eh bien merci et bravo, c’est exactement ce dont j’ai besoin.
Plus qu’a le mettre dans mon code et le faire évoluer.

Merci encore Alberto pour cette exemple qui me parait tres lisible.

Alors apres test rapide ca fonctionne SAUF quand le nom du mois contient un accent.
A ce moment là l’appli s’arrête mais ne signal rien de particulier.
Y a t il une piste ? Peut etre un probleme de codage (UFT) ou le passage des accents dans la ListBox ?

Merci pour votre aide

En fait, en cherchant un peu j’ai trouvé cette erreur :

Date is not in an accepted format for parsing

J’ajoute que si le mois ne contient pas d’accent il n’y a pas d’erreur…

My guess is the way the accent character or encode is working on your computer. You can see é but it could be one character or a combination of two.

If you can put together a sample and simple app, someone here can take a look and suggest encoding or other method to ‘normalize’ the special characters.


Je pense que c’est la façon dont le caractère accentué ou l’encodage fonctionne sur votre ordinateur. Vous pouvez voir é mais cela pourrait être un caractère ou une combinaison de deux.

Si vous pouvez créer un exemple d’application simple, quelqu’un ici pourra y jeter un coup d’œil et suggérer un encodage ou une autre méthode pour “normaliser” les caractères spéciaux.

https://www.deepl.com/translator

remplace le “é” par un “e” avant de faire le date.fromstring
cela permettra de contourner le bug d’accent. (qui ne devrait pas exister je l’accorde…)

après on ne devrait jamais stocker une date en tant que chaine avec les noms des mois
trop compliqué à remettre en forme après
il faut les stocker en tant que sqldate soit YYYY-MM-JJ
c’est independant du pays, et ca se retransforme en tout très facilement.

Merci pour votre aide,
si je remplace le é par un e la date n’est plus au bon format.
Si je passe la date en test avec “1 février 1987” par exemple (avec les " ") ca fonctionne mais moi je vais essayer de traduire des noms de repertoires

Var sDate As String = Trim(Mid(i.Name, iSeparation + 2, i.Name.Length))
'Var sDate As String = “17 février 1971”
Var dtDateNew As DateTime = DateTime.FromString(sDate, frenchLocale)

Quand je regarde dans la fenetre du bas de Xojo, l’in de la date est au bon format pourtant mais des qu’il y a un accent, bim ca bug

Une autre façon que je préfère est l’astronimique “Modified Julian Date”.
Utilisation de décimales - un double (pas un entier) peut se résoudre en milliseconde.

La méthode de Jan Meeus c’est bon (pseudocode): Astronomical Calculations: The Julian Day | James Still

l y a aussi une transformation inverse, cela prend environ 4 lignes dans Xojo.

Veuillez excuser mon mauvais français !

1 Like

Français pas parfait mais nous avons tout compris !

Pour éviter le problème des mois avec accent (février, août, décembre), j’ai utilisé un Select Case et testé “fe”, “ao” et “de”, je crois…
Je lis une date du genre 9 mai 2022 que je transforme en ISO 8601 (AAAA-MM-JJ).

Ceci dit, après avoir ajouté un test (hier, plusieurs mois après que le code original ai été “figé”) sur la date, je me suis rendu compte que ma source (les dates lues) peuvent être bugguées et que mon code original “corrigeait” celà (car le bug était plus loin, genre “féver” - i manquant par exemple -).

On est à l’abri de rien: en voulant sécuriser la lecture de la date, je mets en évidence des bugs…

Oh; et pour une fois que je n’utilisais pas ISO 8601 pour les dates…

PS: ne laissez pas vos utilisateurs libre d’écrire la date à leur guise, ils utiliseront n’importe quoi… points, tiret, etc. de séparation, JJ-MM-AAAA, AAAA-MM-JJ, AAAA-JJ-MM, etc. dans le même document (base de données). Je ne vous racconte pas la m…e (temps perdu) pour standardiser çà.

Vive le trio de PopupMenus (Jour, Mois, Année…) avec des valueurs à choisir dans la liste.