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
Fred
Dans son message
Zoury nous dit :

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)



J'ai regardé d'un peu plus près. C'est assez simple, mais pas SI simple :-)
En effet, seules quelques classes sont accessibles directement.
Pour le reste, il faut créer des wrappers.
http://msdn.microsoft.com/vbrun/vbfusion/5000classes/

Je l'ai fait pour la classe DateTime (en fait ce n'est pas exact, j'ai
simplement écrit une fonction qui prend en paramètre une chaîne et qui
retourne une date, ce que souhaitait Aski) et j'ai pu l'utiliser dans un
projet vba.
Donc, je confirme que cela est faisable. Sans Studio .NET aussi mais il faut
compiler en ligne de commande.

--
Fred
Avatar
Aski
Bonjour à tous qui m'aidez bien dans ma recherche,

.En folâtrant sur son clavier, Jacques93 s'est exprimé ainsi :

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

J'ai bien sûr réussi à faire quelque chose avec les moyens du bord, mais
cela n'a rien de très génial.
Je vais bien sûr essayer toutes les solutions que vous avez proposées et en
profiter pour faire connaissance avec Framework dont on parle tant. (ce qui
me rappelle le premier 'intégré' que j'ai utilisé lorsque j'ai viré de
l'Apple II au PC lol ).

Mon but est d'interpréter les dates des messages de fichiers dbx figurant
dans l'entête du 'texte de brute'. En effet, elles ne sont pas tout à fait
les mêmes que celles décodées par l'analyse des fichiers suivant Aroh (écart
d'une minute au moins).
Il semblerait que toutes les dates sont fournies dans le format "Fri, 1 Apr
2005 19:02:05 +0100" et je désire avoir cette date en français et en tenant
compte des décalages (+0100, -0500, -0800, ...). Je n'ai d'ailleurs pas
trouvé de corrélation entre le décalage et cette notation (d'où le Select
Case de mon pôvre code). ;-(

Cordialement

Aski

////////////////////////////////////////////////////////
Private Sub Form_Load()
Dim i As Byte, Shift As Byte
Dim S As String, M As String, DDate As String
S = "Fri, 1 Apr 2005 19:02:05 +0100"
'isoler la date et le décalage
S = Mid$(S, InStr(S, ",") + 2)
'rechercher un décalage éventuel - sous toute réserve
If InStr(S, "+01") Then
Shift = 1
ElseIf InStr(S, "-05") Then Shift = 7
ElseIf InStr(S, "-08") Then Shift = 10
Else: Shift = 0
End If
'isoler la date
S = Trim$(Left$(S, InStrRev(S, ":") + 2))
'rechercher le mois
M = Mid$(S, InStr(S, " ") + 1, 3)
Select Case LCase(M)
Case "feb": S = Replace(S, M, "fév")
Case "apr": S = Replace(S, M, "avr")
Case "may": S = Replace(S, M, "mai")
Case "jun": S = Replace(S, M, "jui")
Case "jul": S = Replace(S, M, "juil")
Case "aug": S = Replace(S, M, "aoû")
Case "dec": S = Replace(S, M, "déc")
End Select
'ajout du décalage après conversion en variable Date
S = DateAdd("h", Shift, CDate(S))
'mise sous format OE
S = Format$(S, "dddd dd mmm yyyy hh:mm")
End Sub
////////////////////////////////////////////////////////////
Avatar
Aski
Hello à tous qui vous êtes intéressés au problème.

Pourriez-vous republier vos messages.
J'ai fait une grosse c... en effaçant toute la conversation, sauf la réponse
de Jacques93.

Merci d'avance

Cordialement

Aski
Avatar
scraper
Bonjour Aski, dans le message
news:u7mEo$
tu disais :


Hello à tous qui vous êtes intéressés au problème.

Pourriez-vous republier vos messages.



??

J'ai fait une grosse c... en effaçant toute la conversation, sauf la
réponse de Jacques93.



et les sauvegardes ? lol

supprime ton fichier dbx, et réabonne toi ? ;-)


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Aski
En folâtrant sur son clavier, scraper s'est exprimé ainsi :

|| Bonjour Aski, dans le message
|| tu disais :
||
||| J'ai fait une grosse c... en effaçant toute la conversation, sauf la
||| réponse de Jacques93.
||
|| et les sauvegardes ? lol

Je supprime, en général avant de sauvegarder et avec Shift + Suppr. Faut
avouer que ce n'est pas sans risque ... ;-(

|| supprime ton fichier dbx,

Encore du bol, cela m'arrive mais j'ai réussi à l'éviter cette fois. rofl

|| et réabonne toi ? ;-)

Aski
Avatar
Aski
Hello collègues et notamment scraper,

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

|| Bonjour Aski, dans le message
|| tu disais :
||
||| J'ai fait une grosse c... en effaçant toute la conversation, sauf la
||| réponse de Jacques93.
||
|| et les sauvegardes ? lol

Je supprime, en général avant de sauvegarder et avec Shift + Suppr. Faut
avouer que ce n'est pas sans risque ... ;-(

|| supprime ton fichier dbx,

Encore du bol, cela m'arrive mais j'ai réussi à l'éviter cette fois. rofl

|| et réabonne toi ? ;-)

Tu as raison, à première vue, je pensais que c'était une galéjade, mais
c'est une excellente idée.

Donc, inutile évidemment de republier. Excusez-moi de vous demander pardon.
lol

Aski
Avatar
Fred
Dans son message
Aski nous dit :

Bonjour à tous qui m'aidez bien dans ma recherche,

.En folâtrant sur son clavier, Jacques93 s'est exprimé ainsi :

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.





J'ai bien sûr réussi à faire quelque chose avec les moyens du bord,
mais cela n'a rien de très génial.
Je vais bien sûr essayer toutes les solutions que vous avez proposées
et en profiter pour faire connaissance avec Framework dont on parle
tant. (ce qui me rappelle le premier 'intégré' que j'ai utilisé
lorsque j'ai viré de l'Apple II au PC lol ).

Mon but est d'interpréter les dates des messages de fichiers dbx
figurant dans l'entête du 'texte de brute'. En effet, elles ne sont
pas tout à fait les mêmes que celles décodées par l'analyse des
fichiers suivant Aroh (écart d'une minute au moins).
Il semblerait que toutes les dates sont fournies dans le format "Fri,
1 Apr 2005 19:02:05 +0100" et je désire avoir cette date en français
et en tenant compte des décalages (+0100, -0500, -0800, ...). Je n'ai
d'ailleurs pas trouvé de corrélation entre le décalage et cette
notation (d'où le Select Case de mon pôvre code). ;-(

Cordialement

Aski

////////////////////////////////////////////////////////
Private Sub Form_Load()
Dim i As Byte, Shift As Byte
Dim S As String, M As String, DDate As String
S = "Fri, 1 Apr 2005 19:02:05 +0100"
'isoler la date et le décalage
S = Mid$(S, InStr(S, ",") + 2)
'rechercher un décalage éventuel - sous toute réserve
If InStr(S, "+01") Then
Shift = 1
ElseIf InStr(S, "-05") Then Shift = 7
ElseIf InStr(S, "-08") Then Shift = 10
Else: Shift = 0
End If
'isoler la date
S = Trim$(Left$(S, InStrRev(S, ":") + 2))
'rechercher le mois
M = Mid$(S, InStr(S, " ") + 1, 3)
Select Case LCase(M)
Case "feb": S = Replace(S, M, "fév")
Case "apr": S = Replace(S, M, "avr")
Case "may": S = Replace(S, M, "mai")
Case "jun": S = Replace(S, M, "jui")
Case "jul": S = Replace(S, M, "juil")
Case "aug": S = Replace(S, M, "aoû")
Case "dec": S = Replace(S, M, "déc")
End Select
'ajout du décalage après conversion en variable Date
S = DateAdd("h", Shift, CDate(S))
'mise sous format OE
S = Format$(S, "dddd dd mmm yyyy hh:mm")
End Sub
////////////////////////////////////////////////////////////



Bonsoir,
Concernant le format des dates pour les messages internet,
extrait de la RFC 822

date-time = [ day "," ] date time ; dd mm yy
; hh:mm:ss zzz

day = "Mon" / "Tue" / "Wed" / "Thu"
/ "Fri" / "Sat" / "Sun"

date = 1*2DIGIT month 2DIGIT ; day month year
; e.g. 20 Jun 82

month = "Jan" / "Feb" / "Mar" / "Apr"
/ "May" / "Jun" / "Jul" / "Aug"
/ "Sep" / "Oct" / "Nov" / "Dec"

time = hour zone ; ANSI and Military

hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT]
; 00:00:00 - 23:59:59

zone = "UT" / "GMT" ; Universal Time
; North American : UT
/ "EST" / "EDT" ; Eastern: - 5/ - 4
/ "CST" / "CDT" ; Central: - 6/ - 5
/ "MST" / "MDT" ; Mountain: - 7/ - 6
/ "PST" / "PDT" ; Pacific: - 8/ - 7
/ 1ALPHA ; Military: Z = UT;
; A:-1; (J not used)
; M:-12; N:+1; Y:+12
/ ( ("+" / "-") 4DIGIT ) ; Local differential
; hours+min. (HHMM)


Entre-temps, il y a eu modification pour l'année (4 chiffres).
Les quatre chiffres donnent le décalage par rapport à Greenwich.
Sachant qu'en France on est actuellement à +0200 tu peut calculer ton Shift
par une simple soustraction.
(Au passage, si les deux derniers chiffres sont souvent à 0, rien n'empêche
que ce ne soit pas toujours le cas)



--
Fred
Avatar
Aski
Bonsoir Fred,

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

|| Dans son message
|| Aski nous dit :
||
||| Bonjour à tous qui m'aidez bien dans ma recherche,
|||
||| J'ai bien sûr réussi à faire quelque chose avec les moyens du bord,
||| mais cela n'a rien de très génial.
||| Je vais bien sûr essayer toutes les solutions que vous avez
||| proposées et en profiter pour faire connaissance avec Framework
||| dont on parle tant. (ce qui me rappelle le premier 'intégré' que
||| j'ai utilisé lorsque j'ai viré de l'Apple II au PC lol ).
|||
||| Mon but est d'interpréter les dates des messages de fichiers dbx
||| figurant dans l'entête du 'texte de brute'. En effet, elles ne sont
||| pas tout à fait les mêmes que celles décodées par l'analyse des
||| fichiers suivant Aroh (écart d'une minute au moins).
||| Il semblerait que toutes les dates sont fournies dans le format
||| "Fri, 1 Apr 2005 19:02:05 +0100" et je désire avoir cette date en
||| français et en tenant compte des décalages (+0100, -0500, -0800,
||| ...). Je n'ai d'ailleurs pas trouvé de corrélation entre le
||| décalage et cette notation (d'où le Select Case de mon pôvre code).
||| ;-(
|||
||| Cordialement
|||
||| Aski
|||
||| ////////////////////////////////////////////////////////
||| Private Sub Form_Load()
||| Dim i As Byte, Shift As Byte
||| Dim S As String, M As String, DDate As String
||| S = "Fri, 1 Apr 2005 19:02:05 +0100"
||| 'isoler la date et le décalage
||| S = Mid$(S, InStr(S, ",") + 2)
||| 'rechercher un décalage éventuel - sous toute réserve
i = InStr(S, "+")
If i = 0 Then i = InStr(S, "-")
If i = 0 Then
Shift = 0
Else: Shift = 2 - Val(Mid$(S, i, 3))
End If
||| 'isoler la date
||| S = Trim$(Left$(S, InStrRev(S, ":") + 2))
||| 'rechercher le mois
||| M = Mid$(S, InStr(S, " ") + 1, 3)
||| Select Case LCase(M)
||| Case "feb": S = Replace(S, M, "fév")
||| Case "apr": S = Replace(S, M, "avr")
||| Case "may": S = Replace(S, M, "mai")
||| Case "jun": S = Replace(S, M, "jui")
||| Case "jul": S = Replace(S, M, "juil")
||| Case "aug": S = Replace(S, M, "aoû")
||| Case "dec": S = Replace(S, M, "déc")
||| End Select
||| 'ajout du décalage après conversion en variable Date
||| S = DateAdd("h", Shift, CDate(S))
||| 'mise sous format OE
||| S = Format$(S, "dddd dd mmm yyyy hh:mm")
||| End Sub
||| ////////////////////////////////////////////////////////////
||
|| Bonsoir,
|| Concernant le format des dates pour les messages internet,
|| extrait de la RFC 822
||
|| date-time = [ day "," ] date time ; dd mm yy
|| ; hh:mm:ss zzz
||
|| day = "Mon" / "Tue" / "Wed" / "Thu"
|| / "Fri" / "Sat" / "Sun"
||
|| date = 1*2DIGIT month 2DIGIT ; day month year
|| ; e.g. 20 Jun 82
||
|| month = "Jan" / "Feb" / "Mar" / "Apr"
|| / "May" / "Jun" / "Jul" / "Aug"
|| / "Sep" / "Oct" / "Nov" / "Dec"
||
|| time = hour zone ; ANSI and Military
||
|| hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT]
|| ; 00:00:00 - 23:59:59
||
|| zone = "UT" / "GMT" ; Universal Time
|| ; North American : UT
|| / "EST" / "EDT" ; Eastern: - 5/ - 4
|| / "CST" / "CDT" ; Central: - 6/ - 5
|| / "MST" / "MDT" ; Mountain: - 7/ - 6
|| / "PST" / "PDT" ; Pacific: - 8/ - 7
|| / 1ALPHA ; Military: Z = UT;
|| ; A:-1; (J not used)
|| ; M:-12; N:+1; Y:+12
|| / ( ("+" / "-") 4DIGIT ) ; Local differential
|| ; hours+min. (HHMM)
||
||
|| Entre-temps, il y a eu modification pour l'année (4 chiffres).
|| Les quatre chiffres donnent le décalage par rapport à Greenwich.
|| Sachant qu'en France on est actuellement à +0200 tu peut calculer
|| ton Shift par une simple soustraction.
|| (Au passage, si les deux derniers chiffres sont souvent à 0, rien
|| n'empêche que ce ne soit pas toujours le cas)
|| --
|| Fred

Merci Fred, voilà une explication claire qui m'enlève une épine du pied.
J'ai modifié le code précédent en conséquence.
Il faut ajouter "CET" +0100 à ta liste.
J'additionnais +01 alors qu'il fallait le soustraire après avoir ajouté
+0200.
Je ne comprends pas pourquoi on pourrait avoir des décalages en minutes
(lorsque les 2 derniers digits sont différents de 0).

Cordialement

Aski
Avatar
Zoury
> Je ne comprends pas pourquoi on pourrait avoir des décalages en minutes
(lorsque les 2 derniers digits sont différents de 0).



Ouvre ton horloge système (celle dans le systray) et va dans l'onglet fuseau
horaire. Tu trouveras quelques rares endroits dans le monde tel que
Terre-Neuve, Téhéran, Kaboul, etc qui sont décalés de 30 minutes. Katmandou
est même décalé de 45 minutes. :O)


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

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

|| Dans son message
|| Aski nous dit :
||
||| Bonjour à tous qui m'aidez bien dans ma recherche,
|||
||| J'ai bien sûr réussi à faire quelque chose avec les moyens du bord,
||| mais cela n'a rien de très génial.
||| Je vais bien sûr essayer toutes les solutions que vous avez
||| proposées et en profiter pour faire connaissance avec Framework
||| dont on parle tant. (ce qui me rappelle le premier 'intégré' que
||| j'ai utilisé lorsque j'ai viré de l'Apple II au PC lol ).
|||
||| Mon but est d'interpréter les dates des messages de fichiers dbx
||| figurant dans l'entête du 'texte de brute'. En effet, elles ne sont
||| pas tout à fait les mêmes que celles décodées par l'analyse des
||| fichiers suivant Aroh (écart d'une minute au moins).
||| Il semblerait que toutes les dates sont fournies dans le format
||| "Fri, 1 Apr 2005 19:02:05 +0100" et je désire avoir cette date en
||| français et en tenant compte des décalages (+0100, -0500, -0800,
||| ...). Je n'ai d'ailleurs pas trouvé de corrélation entre le
||| décalage et cette notation (d'où le Select Case de mon pôvre code).
||| ;-(
|||
||| Cordialement
|||
||| Aski
|||
||| ////////////////////////////////////////////////////////
||| Private Sub Form_Load()
||| Dim i As Byte, Shift As Byte
||| Dim S As String, M As String, DDate As String
||| S = "Fri, 1 Apr 2005 19:02:05 +0100"
||| 'isoler la date et le décalage
||| S = Mid$(S, InStr(S, ",") + 2)
||| 'rechercher un décalage éventuel - sous toute réserve
i = InStr(S, "+")
If i = 0 Then i = InStr(S, "-")
If i = 0 Then
Shift = 0
Else: Shift = 2 - Val(Mid$(S, i, 3))
End If
||| 'isoler la date
||| S = Trim$(Left$(S, InStrRev(S, ":") + 2))
||| 'rechercher le mois
||| M = Mid$(S, InStr(S, " ") + 1, 3)
||| Select Case LCase(M)
||| Case "feb": S = Replace(S, M, "fév")
||| Case "apr": S = Replace(S, M, "avr")
||| Case "may": S = Replace(S, M, "mai")
||| Case "jun": S = Replace(S, M, "jui")
||| Case "jul": S = Replace(S, M, "juil")
||| Case "aug": S = Replace(S, M, "aoû")
||| Case "dec": S = Replace(S, M, "déc")
||| End Select
||| 'ajout du décalage après conversion en variable Date
||| S = DateAdd("h", Shift, CDate(S))
||| 'mise sous format OE
||| S = Format$(S, "dddd dd mmm yyyy hh:mm")
||| End Sub
||| ////////////////////////////////////////////////////////////
||
|| Bonsoir,
|| Concernant le format des dates pour les messages internet,
|| extrait de la RFC 822
||
|| date-time = [ day "," ] date time ; dd mm yy
|| ; hh:mm:ss zzz
||
|| day = "Mon" / "Tue" / "Wed" / "Thu"
|| / "Fri" / "Sat" / "Sun"
||
|| date = 1*2DIGIT month 2DIGIT ; day month year
|| ; e.g. 20 Jun 82
||
|| month = "Jan" / "Feb" / "Mar" / "Apr"
|| / "May" / "Jun" / "Jul" / "Aug"
|| / "Sep" / "Oct" / "Nov" / "Dec"
||
|| time = hour zone ; ANSI and Military
||
|| hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT]
|| ; 00:00:00 - 23:59:59
||
|| zone = "UT" / "GMT" ; Universal Time
|| ; North American : UT
|| / "EST" / "EDT" ; Eastern: - 5/ - 4
|| / "CST" / "CDT" ; Central: - 6/ - 5
|| / "MST" / "MDT" ; Mountain: - 7/ - 6
|| / "PST" / "PDT" ; Pacific: - 8/ - 7
|| / 1ALPHA ; Military: Z = UT;
|| ; A:-1; (J not used)
|| ; M:-12; N:+1; Y:+12
|| / ( ("+" / "-") 4DIGIT ) ; Local differential
|| ; hours+min. (HHMM)
||
||
|| Entre-temps, il y a eu modification pour l'année (4 chiffres).
|| Les quatre chiffres donnent le décalage par rapport à Greenwich.
|| Sachant qu'en France on est actuellement à +0200 tu peut calculer
|| ton Shift par une simple soustraction.
|| (Au passage, si les deux derniers chiffres sont souvent à 0, rien
|| n'empêche que ce ne soit pas toujours le cas)
|| --
|| Fred

Merci Fred, voilà une explication claire qui m'enlève une épine du pied.
J'ai modifié le code précédent en conséquence.
Il faut ajouter "CET" +0100 à ta liste.
J'additionnais +01 alors qu'il fallait le soustraire après avoir ajouté
+0200.
Je ne comprends pas pourquoi on pourrait avoir des décalages en minutes
(lorsque les 2 derniers digits sont différents de 0).

Cordialement

Aski



Pour simplifier un peu plus les choses, les mails ou les post sur
newsgroups envoyés avant avant le 27/03/2005 vers 2 ou 3h du matin, ne
chipotons pas, (heure d'hiver) +1:00, depuis, disons le 27 mars passée
cette heure => +2:00.

Il ne semble pas pas y avoir de méthode simple, même sans s'occuper des
format de date dans les mails et dans les newsgroups, ce n'est déja pas
simple. Les formats de date sont différents selon leurs utilisation
(Date système, date fichier, temps universel, temps local, etc ...)

--
Cordialement,

Jacques.
1 2 3 4 5