Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conversions de dates

68 réponses
Avatar
Aski
Bonjour,

Je désire convertir une date de la forme "23 fév 2005 18:33:22".
La routine suivante fonctionne correctement.
Par contre, si la chaîne a été inscrite en anglais, la conversion CDate()
n'est pas valide.

J'ai recherché un moyen de modifier la langue pour faire la conversion et je
n'ai trouvé que SetLocaleInfo() qui ne semble pas adaptée à ce que je désire
faire.

Avez-vous une idée géniale ?

Merci

Aski

////////////////
Private Sub Form_Load()
Dim S As String
Dim DDate As String
'fonctionne bien
S = "23 fév 2005 18:33:22"
DDate = CDate(S) + CDate("07:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")

'la conversion CDate() n'est pas valide
S = "9 Feb 2005 14:52:40"
DDate = CDate(S) ' + CDate("01:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
End Sub
/////////////////

10 réponses

1 2 3 4 5
Avatar
LE TROLL
A défaut d'autre chose, tu peux récupérer ton mois texte, le
passer dans un nouvelle chaîne en mois numérique, puis
inverser dans cette nouvelle chaîne, le mois et le jour...
--------------

"Aski" a écrit dans le message de news:

Bonjour,

Je désire convertir une date de la forme "23 fév 2005
18:33:22".
La routine suivante fonctionne correctement.
Par contre, si la chaîne a été inscrite en anglais, la
conversion CDate() n'est pas valide.

J'ai recherché un moyen de modifier la langue pour faire
la conversion et je n'ai trouvé que SetLocaleInfo() qui ne
semble pas adaptée à ce que je désire faire.

Avez-vous une idée géniale ?

Merci

Aski

////////////////
Private Sub Form_Load()
Dim S As String
Dim DDate As String
'fonctionne bien
S = "23 fév 2005 18:33:22"
DDate = CDate(S) + CDate("07:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")

'la conversion CDate() n'est pas valide
S = "9 Feb 2005 14:52:40"
DDate = CDate(S) ' + CDate("01:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
End Sub
/////////////////




Avatar
Aski
Bonjour,

Effectivement, mais je ne trouve pas ceci très *pro*.
Cependant c'est bien ce que je pensais faire par défaut.

Merci

Aski

En folâtrant sur son clavier, LE TROLL s'est exprimé ainsi :

|| A défaut d'autre chose, tu peux récupérer ton mois texte, le
|| passer dans un nouvelle chaîne en mois numérique, puis
|| inverser dans cette nouvelle chaîne, le mois et le jour...
|| --------------
||
|| "Aski" a écrit dans le message de news:
||
||| Bonjour,
|||
||| Je désire convertir une date de la forme "23 fév 2005
||| 18:33:22".
||| La routine suivante fonctionne correctement.
||| Par contre, si la chaîne a été inscrite en anglais, la
||| conversion CDate() n'est pas valide.
|||
||| J'ai recherché un moyen de modifier la langue pour faire
||| la conversion et je n'ai trouvé que SetLocaleInfo() qui ne
||| semble pas adaptée à ce que je désire faire.
|||
||| Avez-vous une idée géniale ?
|||
||| Merci
|||
||| Aski
|||
||| ////////////////
||| Private Sub Form_Load()
||| Dim S As String
||| Dim DDate As String
||| 'fonctionne bien
||| S = "23 fév 2005 18:33:22"
||| DDate = CDate(S) + CDate("07:00")
||| S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
|||
||| 'la conversion CDate() n'est pas valide
||| S = "9 Feb 2005 14:52:40"
||| DDate = CDate(S) ' + CDate("01:00")
||| S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
||| End Sub
||| /////////////////
Avatar
LE TROLL
Ben dès fois, quand on n'a pas de réponse, ou qu'il n'en
existe pas, faut se démerder :o)
---------

"Aski" a écrit dans le message de news:

Bonjour,

Effectivement, mais je ne trouve pas ceci très *pro*.
Cependant c'est bien ce que je pensais faire par défaut.

Merci

Aski

En folâtrant sur son clavier, LE TROLL s'est exprimé ainsi
:

|| A défaut d'autre chose, tu peux récupérer ton mois
texte, le
|| passer dans un nouvelle chaîne en mois numérique, puis
|| inverser dans cette nouvelle chaîne, le mois et le
jour...
|| --------------
||
|| "Aski" a écrit dans le message de news:
||
||| Bonjour,
|||
||| Je désire convertir une date de la forme "23 fév 2005
||| 18:33:22".
||| La routine suivante fonctionne correctement.
||| Par contre, si la chaîne a été inscrite en anglais, la
||| conversion CDate() n'est pas valide.
|||
||| J'ai recherché un moyen de modifier la langue pour
faire
||| la conversion et je n'ai trouvé que SetLocaleInfo()
qui ne
||| semble pas adaptée à ce que je désire faire.
|||
||| Avez-vous une idée géniale ?
|||
||| Merci
|||
||| Aski
|||
||| ////////////////
||| Private Sub Form_Load()
||| Dim S As String
||| Dim DDate As String
||| 'fonctionne bien
||| S = "23 fév 2005 18:33:22"
||| DDate = CDate(S) + CDate("07:00")
||| S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
|||
||| 'la conversion CDate() n'est pas valide
||| S = "9 Feb 2005 14:52:40"
||| DDate = CDate(S) ' + CDate("01:00")
||| S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
||| End Sub
||| /////////////////



Avatar
Fred
Dans son message
Aski nous dit :

Bonjour,

Je désire convertir une date de la forme "23 fév 2005 18:33:22".
La routine suivante fonctionne correctement.
Par contre, si la chaîne a été inscrite en anglais, la conversion
CDate() n'est pas valide.

J'ai recherché un moyen de modifier la langue pour faire la
conversion et je n'ai trouvé que SetLocaleInfo() qui ne semble pas
adaptée à ce que je désire faire.

Avez-vous une idée géniale ?

Merci

Aski

////////////////
Private Sub Form_Load()
Dim S As String
Dim DDate As String
'fonctionne bien
S = "23 fév 2005 18:33:22"
DDate = CDate(S) + CDate("07:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")

'la conversion CDate() n'est pas valide
S = "9 Feb 2005 14:52:40"
DDate = CDate(S) ' + CDate("01:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
End Sub
/////////////////



Bonjour Aski,
J'ai un peu perdu de vue le VB6 mais ton problème ne me semble pas simple à
résoudre.
Par contre, le NET Framework te le permet.
Pourquoi ne pas jeter un coup d'oeil à cette page ?
http://msdn.microsoft.com/vbrun/vbfusion/usingnet/default.aspx
Il semble qu'on puisse assez simplement faire appel aux objets du framework
à partir de VB6.

Regarde également ici
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDateTimeClassParseTopic2.asp
La méthode Parse de la structure DateTime permet d'interpréter une date en
fonction d'une "Culture"

Tout cela reste bien sûr à tester. Je n'ai hélas pas de vb6 sous la main
avant la semaine prochaine pour pouvoir confirmer ces informations.

Et bien sûr, il faut que l'usage du framework ne te pose pas de souci.

--
Fred
Avatar
Zoury
Salut Aski ! :O)

Les dates te sont fournies dans un format en particulier ou tu dois
supporter tout les formats de pour les deux cultures ?
Aussi, quel sont les cultures à supporter ?
Car les cultures Anglais (Canada) et Anglais (USA), par exemple, n'ont pas
nécessairement les même formats de date..

--
Cordialement
Yanick
MVP pour Visual Basic
"Aski" a écrit dans le message de
news:
Bonjour,

Je désire convertir une date de la forme "23 fév 2005 18:33:22".
La routine suivante fonctionne correctement.
Par contre, si la chaîne a été inscrite en anglais, la conversion CDate()
n'est pas valide.

J'ai recherché un moyen de modifier la langue pour faire la conversion et


je
n'ai trouvé que SetLocaleInfo() qui ne semble pas adaptée à ce que je


désire
faire.

Avez-vous une idée géniale ?

Merci

Aski

////////////////
Private Sub Form_Load()
Dim S As String
Dim DDate As String
'fonctionne bien
S = "23 fév 2005 18:33:22"
DDate = CDate(S) + CDate("07:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")

'la conversion CDate() n'est pas valide
S = "9 Feb 2005 14:52:40"
DDate = CDate(S) ' + CDate("01:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
End Sub
/////////////////




Avatar
Zoury
Salut Fred ! :O)

Ça pourrait être une solution intéressante.
Mais je me dit que s'ils peuvent le faire en .NET, on doit pouvoir le faire
en VB... ;O)
Ça éviterait au moins l'obligation d'installer le framework.
J'vais continuer à chercher de mon côté, mais au moins on sait qu'il existe
une porte de sortie.

--
Cordialement
Yanick
MVP pour Visual Basic
"Fred" a écrit dans le message de
news:
Dans son message
Aski nous dit :

> Bonjour,
>
> Je désire convertir une date de la forme "23 fév 2005 18:33:22".
> La routine suivante fonctionne correctement.
> Par contre, si la chaîne a été inscrite en anglais, la conversion
> CDate() n'est pas valide.
>
> J'ai recherché un moyen de modifier la langue pour faire la
> conversion et je n'ai trouvé que SetLocaleInfo() qui ne semble pas
> adaptée à ce que je désire faire.
>
> Avez-vous une idée géniale ?
>
> Merci
>
> Aski
>
> ////////////////
> Private Sub Form_Load()
> Dim S As String
> Dim DDate As String
> 'fonctionne bien
> S = "23 fév 2005 18:33:22"
> DDate = CDate(S) + CDate("07:00")
> S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
>
> 'la conversion CDate() n'est pas valide
> S = "9 Feb 2005 14:52:40"
> DDate = CDate(S) ' + CDate("01:00")
> S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
> End Sub
> /////////////////

Bonjour Aski,
J'ai un peu perdu de vue le VB6 mais ton problème ne me semble pas simple


à
résoudre.
Par contre, le NET Framework te le permet.
Pourquoi ne pas jeter un coup d'oeil à cette page ?
http://msdn.microsoft.com/vbrun/vbfusion/usingnet/default.aspx
Il semble qu'on puisse assez simplement faire appel aux objets du


framework
à partir de VB6.

Regarde également ici



http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDateTimeClassParseTopic2.asp
La méthode Parse de la structure DateTime permet d'interpréter une date en
fonction d'une "Culture"

Tout cela reste bien sûr à tester. Je n'ai hélas pas de vb6 sous la main
avant la semaine prochaine pour pouvoir confirmer ces informations.

Et bien sûr, il faut que l'usage du framework ne te pose pas de souci.

--
Fred





Avatar
Fred
Dans son message
Zoury nous dit :

Salut Fred ! :O)

Ça pourrait être une solution intéressante.
Mais je me dit que s'ils peuvent le faire en .NET, on doit pouvoir le
faire en VB... ;O)



Certainement !

Ça éviterait au moins l'obligation d'installer le framework.



Je suis prêt à prendre le pari que dans peu de temps, il sera installé
partout. Ne serait-ce qu'avec la multiplication des applis développées avec.
J'ai découvert par hasard le lien que j'ai passé à Aski. Pour ceux qui
souhaitent rester en VB6, et connaissant un peu le framework, je dois dire
que beaucoup de questions que l'on voit ici trouveraient leur solution dans
l'utilisation du framework. Il y a peu notamment, il était question du File
System Object, (pour ou contre). Le framework propose une alternative
intéressante. Je ne parle pas de tout ce qu'il propose en remplacement du
"pauvre" contrôle Winsock !. Bref, voila pourquoi je me suis autorisé cette
suggestion :)
Qu'en penses-tu ? Est-une direction souhaitable ou bien juste une rustine ?
Ou quelque chose à déconseiller comme j'ai vu que l'était l'utilisation du
FSO ? Ou à conseiller pour préparer une éventuelle migration vers VB .NET ?

J'vais continuer à chercher de mon côté, mais au moins on sait qu'il
existe une porte de sortie.



Bonne recherche.


--
Fred
Avatar
Gloops
Salut,

Pour ma part, j'ai posé la question il y a un moment, de pouvoir
interpréter une date reçue par mail en protocole pop, dans des formats
divers, pour l'afficher de manière homogène. Tous les logiciels de mail
standard savent faire ça, et jusque là je me contente d'afficher comme
reçu, j'avoue que ça me brancherait bien de faire mieux. J'avais donné
une dizaine d'exemples de dates reçues en pop, sans savoir si il existe
encore d'autres formats pas encore vus depuis le développement de mon
programme. Il faut bien reconnaître que les réponses ne s'étaient pas
bousculées, peut-être seront-elles plus nombreuses cette fois-ci.

Zoury a écrit, le 18/05/2005 16:16 :

Salut Aski ! :O)

Les dates te sont fournies dans un format en particulier ou tu dois
supporter tout les formats de pour les deux cultures ?
Aussi, quel sont les cultures à supporter ?
Car les cultures Anglais (Canada) et Anglais (USA), par exemple, n'ont pas
nécessairement les même formats de date..



Avatar
Zoury
> Qu'en penses-tu ? Est-une direction souhaitable ou bien juste une rustine


?

Je ne l'ai jamais fait, mais à mon avis c'est une solution très valable. Les
classes .NET peuvent être enregistrer en tant que composant COM qui est
supporté par VB6.

La seule raison pour laquelle j'aurais tendance à favoriser une solution
entièrement VB 6 ou encore via API, c'est pour le support et le déploiement.

1. Un programme codé en plusieurs languages demande tout de même un
minimum de connaissance de ces languages et de leurs environnements
respectifs.
2. Déploiyer des composants COM n'est pas toujours une choses faciles et
dans ce cas ci, le composant COM en question emploi le framework,
j'entrevois des problèmes possibles de versionnage.

Donc en gros, je crois que c'est possible, que ça ne semble pas si fou que
ça, mais que ça complique tout de même la solution. Il suffit bien se
préparer et de bien documenter. :O)

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Jacques93
Bonsoir Aski,
Aski a écrit :
Bonjour,

Je désire convertir une date de la forme "23 fév 2005 18:33:22".
La routine suivante fonctionne correctement.
Par contre, si la chaîne a été inscrite en anglais, la conversion CDate()
n'est pas valide.

J'ai recherché un moyen de modifier la langue pour faire la conversion et je
n'ai trouvé que SetLocaleInfo() qui ne semble pas adaptée à ce que je désire
faire.

Avez-vous une idée géniale ?




Pas géniale, mais amusante : utiliser la fonction SetLocale de VBScript
dans une page HTML.
Voir ici pour d'autre format :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsmsclcid.asp

(Ajouter une référence à Microsoft HTML Object Library : MSHTML.tlb)

====================================================================== Private Sub Command1_Click()
Dim S As String
Dim DDate As String

'fonctionne bien
S = "23 fév 2005 18:33:22"
DDate = CDate(S) + CDate("07:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
Debug.Print S

'la conversion CDate() n'est pas valide
S = "9 Feb 2005 14:52:40"
S = CvtDate("en-gb", S)
DDate = CDate(S) + CDate("01:00")
S = Format$(DDate, "dddd dd mmm yyyy hh:mm")
Debug.Print S
End Sub

Private Function CvtDate(From As String, S As String) As Date
Dim fNum As Integer
Dim fName As String
Dim objMSHTML As mshtml.HTMLDocument
Dim oDoc As mshtml.HTMLDocument

fNum = FreeFile()
fName = App.Path & "Date.html"
Open fName For Output As #fNum
Print #fNum, "<html>"
Print #fNum, "<Body>"
Print #fNum, "<Script Language=" & Chr$(34) & "vbscript" & Chr$(34) & ">"
Print #fNum, "Dim CurrentLocale"
Print #fNum, "Dim GBDate"
Print #fNum, "Dim Original"
Print #fNum, "CurrentLocale=GetLocale"
Print #fNum, "GBDate=" & Chr$(34) & S & Chr$(34)
Print #fNum, "Original=SetLocale(" & Chr$(34) & From & Chr$(34) & ")"
Print #fNum, "MyDateÍate(GBDate)"
Print #fNum, "Original=SetLocale(CurrentLocale)"
Print #fNum, "document.Writeln FormatDateTime(MyDate, vbGeneralDate)"
Print #fNum, "</Script>"
Print #fNum, "</Body>"
Print #fNum, "</html>"
Close #fNum

Set objMSHTML = New mshtml.HTMLDocument
Set oDoc = objMSHTML.createDocumentFromUrl(fName, vbNullString)
While oDoc.readyState <> "complete"
DoEvents
Wend
CvtDate = oDoc.documentElement.innerText
Set oDoc = Nothing
Set objMSHTML = Nothing
Kill fName
End Function

--
Cordialement,

Jacques.
1 2 3 4 5