Forcer le format d'une date [Fr->En]

Résolu
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006 - 8 sept. 2005 à 15:15
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 7 mars 2006 à 03:32
Bonjour,

Voilà mon pb, j'ai un programme qui va récupérer des info dans un SGBD (oracle)

Le problème est le suivant, il me faut un format de date spécifique (dd mmm yyyy en anglais) jusque là pas de soucis :)

Par contre mon système doit marcher sur des windows en anglais et en français.

Pour la version anglaise pas de soucis la date est au bon format, par contre dés que windows est en français, je me retrouve avec le problème suivant : la date ressemble à : 12 sept 2005 alors que je voudrais obtenir 12 Sep 2005.

Si je fais les modifications manuellement les requêtes plantent.

Quelqu'un aurait-il une solution?

Merci d'avance

voici le code que j'utilise pour modifier mes dates :


Private Sub Calendar1_Click()


Select Case Calendar1.Month
Case 1
gsCalendarDate = Calendar1.Day & "/" & "Jan" & "/" & Calendar1.Year
Case 2
gsCalendarDate = Calendar1.Day & "/" & "Feb" & "/" & Calendar1.Year
Case 3
gsCalendarDate = Calendar1.Day & "/" & "Mar" & "/" & Calendar1.Year
Case 4
gsCalendarDate = Calendar1.Day & "/" & "Apr" & "/" & Calendar1.Year
Case 5
gsCalendarDate = Calendar1.Day & "/" & "May" & "/" & Calendar1.Year
Case 6
gsCalendarDate = Calendar1.Day & "/" & "Jun" & "/" & Calendar1.Year
Case 7
gsCalendarDate = Calendar1.Day & "/" & "Jul" & "/" & Calendar1.Year
Case 8
gsCalendarDate = Calendar1.Day & "/" & "Aug" & "/" & Calendar1.Year
Case 9
gsCalendarDate = Calendar1.Day & "/" & "Sep" & "/" & Calendar1.Year
Case 10
gsCalendarDate = Calendar1.Day & "/" & "Oct" & "/" & Calendar1.Year
Case 11
gsCalendarDate = Calendar1.Day & "/" & "Nov" & "/" & Calendar1.Year
Case 12
gsCalendarDate = Calendar1.Day & "/" & "Dec" & "/" & Calendar1.Year

End Select


Unload Me
frmDateEntry.Show
If gsDateType = "StartDate" Then
frmDateEntry.txtStartDate = Format(gsCalendarDate, "dd mmm yyyy")
ElseIf gsDateType = "EndDate" Then
frmDateEntry.txtEndDate = Format(gsCalendarDate, "dd mmm yyyy")
End If



End Sub

13 réponses

cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
9 sept. 2005 à 08:32
Salut ,
Tu peux me rejoindre sur la discussion du code que j'ai posté Hier:
http://www.vbfrance.com/code.aspx?ID=33701
C'est le problème aussi de format avec le point décimal. Mais c'est un problème identique.
Sinon regarde la page de Microsoft ( en anglais )

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_8d0z.asp
sur "National Language Support Functions"
tu trouveras la fonction GetDateFormat qui permet de convertir ta date au format voulu.

Tu peux jouer avec l'exemple suivant :


Private Type SYSTEMTIME


wYear As Integer


wMonth As Integer


wDayOfWeek As Integer


wDay As Integer


wHour As Integer


wMinute As Integer


wSecond As Integer


wMilliseconds As Integer


End Type


Private Declare Function GetDateFormat Lib "kernel32" Alias "GetDateFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpDate As SYSTEMTIME, ByVal lpFormat As String, ByVal lpDateStr As String, ByVal cchDate As Long) As Long


Private Sub Form_Load()


Dim Buffer As String, ST As SYSTEMTIME


With ST


.wDay = 6


.wMonth = 8


.wYear = 2000


End With


Buffer = String(255, 0)


GetDateFormat ByVal 0&, 0, ST, vbNullString, Buffer, Len(Buffer)


Buffer = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 1)


MsgBox Buffer


End Sub

Pour reprendre une petite phrase " VB s'adapte très bien aux paramètres régionnaux " Oui mais c'est du boulot .

Cuq
3
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
9 sept. 2005 à 08:43
Une petite précision en plus dans l'exemple :

Ecrire par exemple

GetDateFormat 1024, 0, ST, "dd MMM yyyy", Buffer, Len(Buffer)

1036 représentant la france
Pour les autres :


Value |
Meaning |
----

1
0x1,
Arabic,
----

4
0x4,
Chinese,
----

9
0x9,
English,
----

1025
0x401,
Arabic – Saudi Arabia,
----

1026
0x402,
Bulgarian,
----

1027
0x403,
Catalan,
----

1028
0x404,
Chinese – Taiwan,
----

1029
0x405,
Czech,
----

1030
0x406,
Danish,
----

1031
0x407,
German – Germany,
----

1032
0x408,
Greek,
----

1033
0x409,
English – United States,
----

1034
0x40A,
Spanish – Traditional Sort,
----

1035
0x40B,
Finnish,
----

1036
0x40C,
French – France,
----

1037
0x40D,
Hebrew,
----

1038
0x40E,
Hungarian,
----

1039
0x40F,
Icelandic,
----

1040
0x410,
Italian – Italy,
----

1041
0x411,
Japanese,
----

1042
0x412,
Korean,
----

1043
0x413,
Dutch – Netherlands,
----

1044
0x414,
Norwegian – Bokmal,
----

1045
0x415,
Polish,
----

1046
0x416,
Portuguese – Brazil,
----

1047
0x417,
Rhaeto-Romanic,
----

1048
0x418,
Romanian,
----

1049
0x419,
Russian,
----

1050
0x41A,
Croatian,
----

1051
0x41B,
Slovak,
----

1052
0x41C,
Albanian,
----

1053
0x41D,
Swedish,
----

1054
0x41E,
Thai,
----

1055
0x41F,
Turkish,
----

1056
0x420,
Urdu,
----

1057
0x421,
Indonesian,
----

1058
0x422,
Ukrainian,
----

1059
0x423,
Belarusian,
----

1060
0x424,
Slovenian,
----

1061
0x425,
Estonian,
----

1062
0x426,
Latvian,
----

1063
0x427,
Lithuanian,
----

1065
0x429,
Persion,
----

1066
0x42A,
Vietnamese,
----

1069
0x42D,
Basque,
----

1070
0x42E,
Serbian,
----

1071
0x42F,
Macedonian (FYROM),
----

1072
0x430,
Sutu,
----

1073
0x431,
Tsonga,
----

1074
0x432,
Tswana,
----

1076
0x434,
Xhosa,
----

1077
0x435,
Zulu,
----

1078
0x436,
Afrikaans,
----

1080
0x438,
Faeroese,
----

1081
0x439,
Hindi,
----

1082
0x43A,
Maltese,
----

1084
0x43C,
Gaelic,
----

1085
0x43D,
Yiddish,
----

1086
0x43E,
Malay – Malaysia,
----

2049
0x801,
Arabic – Iraq,
----

2052
0x804,
Chinese – PRC,
----

2055
0x807,
German – Switzerland,
----

2057
0x809,
English – United Kingdom,
----

2058
0x80A,
Spanish – Mexico,
----

2060
0x80C,
French – Belgium,
----

2064
0x810,
Italian – Switzerland,
----

2067
0x813,
Dutch – Belgium,
----

2068
0x814,
Norwegian – Nynorsk,
----

2070
0x816,
Portuguese – Portugal,
----

2072
0x818,
Romanian – Moldova,
----

2073
0x819,
Russian – Moldova,
----

2074
0x81A,
Serbian – Latin,
----

2077
0x81D,
Swedish – Finland,
----

3073
0xC01,
Arabic – Egypt,
----

3076
0xC04,
Chinese – Hong Kong SAR,
----

3079
0xC07,
German – Austria,
----

3081
0xC09,
English – Australia,
----

3082
0xC0A,
Spanish – International Sort,
----

3084
0xC0C,
French – Canada,
----

3098
0xC1A,
Serbian – Cyrillic,
----

4097
0x1001,
Arabic – Libya,
----

4100
0x1004,
Chinese – Singapore,
----

4103
0x1007,
German – Luxembourg,
----

4105
0x1009,
English – Canada,
----

4106
0x100A,
Spanish – Guatemala,
----

4108
0x100C,
French – Switzerland,
----

5121
0x1401,
Arabic – Algeria,
----

5127
0x1407,
German – Liechtenstein,
----

5129
0x1409,
English – New Zealand,
----

5130
0x140A,
Spanish – Costa Rica,
----

5132
0x140C,
French – Luxembourg,
----

6145
0x1801,
Arabic – Morocco,
----

6153
0x1809,
English – Ireland,
----

6154
0x180A,
Spanish – Panama,
----

7169
0x1C01,
Arabic – Tunisia,
----

7177
0x1C09,
English – South Africa,
----

7178
0x1C0A,
Spanish – Dominican Republic,
----

8193
0x2001,
Arabic – Oman,
----

8201
0x2009,
English – Jamaica,
----

8202
0x200A,
Spanish – Venezuela,
----

9217
0x2401,
Arabic – Yemen,
----

9226
0x240A,
Spanish – Colombia,
----

10241
0x2801,
Arabic – Syria,
----

10249
0x2809,
English – Belize,
----

10250
0x280A,
Spanish – Peru,
----

11265
0x2C01,
Arabic – Jordan,
----

11273
0x2C09,
English – Trinidad,
----

11274
0x2C0A,
Spanish – Argentina,
----

12289
0x3001,
Arabic – Lebanon,
----

12298
0x300A,
Spanish – Ecuador,
----

13313
0x3401,
Arabic – Kuwait,
----

13322
0x340A,
Spanish – Chile,
----

14337
0x3801,
Arabic – U.A.E.,
----

14346
0x380A,
Spanish – Uruguay,
----

15361
0x3C01,
Arabic – Bahrain,
----

15370
0x3C0A,
Spanish – Paraguay,
----

16385
0x4001,
Arabic – Qatar,
----

16394
0x400A,
Spanish – Bolivia,
----

17418
0x440A,
Spanish – El Salvador,
----

18442
0x480A,
Spanish – Honduras,
----

19466
0x4C0A,
Spanish – Nicaragua,
----

20490
0x500A,
Spanish – Puerto Rico
3
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
8 sept. 2005 à 15:38
Salut

pour la france tu peux utiliser l'instruction format:

dmadate = format(dmadate, "dd/mm/yy hh:nn:ss")

en esperant t'aider
bonne prog !!



Deluka.
0
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006
8 sept. 2005 à 15:44
Le problème que j'ai, c'est que l'instruction Format(gsCalendarDate, "dd mmm yyyy")

Me donne en anglais : 12 Sep 2005 (Ca c'est bon:) mais en français ça donne: 12 sept 2005 et là c pas bon du tout
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
8 sept. 2005 à 15:46
oups
j'avais pas lu que tu utiliser déjà cette instruction désolé


si c'est un problème de paramètres régionnaux pourquoi pas les changer au début de ton prog dans la registry
et mettre en anglais le format de la date
puis à la fin de ton prog tu replace comme avant



Deluka.
0
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006
8 sept. 2005 à 16:03
J'y avais bien pensé, le problème c'est que c'est unprog qui tourne en moyenne 30 à 45 min.

Vu que dans ma sal.... une bonne partie des utilisateurs se servent de macros qui, comme par hasard utilise les dates systèmes , je peux pas me permettre ses changements :)

Je sens que je vais devoir me taper une version spécifique pour les français :)
0
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
8 sept. 2005 à 16:19
lol
alors dans ce cas là tu peux mettre en ligne de commande (ou en option de compilation met là tu auras des .exe différents) /Language = Francais
puis tu met une variable globale qui récupère la ligne de commande Francais
ensuite tu met des If...

ou tu vas lire dans la registry quels sont les parametres regionnaux puis pareil si Francais...

Bon courage et si tu trouve met la solution sur le forum si jamais ça peut aider quelqu'un d'autre..

'lut



Deluka.
0
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 56
9 sept. 2005 à 04:01
bonsoir,

j'aurais plutot fais comme ça :

frmDateEntry.txtStartDate = Format(gsCalendarDate, "dd / mm / yyyy")

mais par contre en mettant ce code si ça marche même sur un système anglais il te mettra la date au format francais

salut
doro
0
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006
9 sept. 2005 à 09:31
Génial, ça marche effectivement très bien ( après quelques heures d'adaptation )


Merci à tous
0
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
9 sept. 2005 à 09:59
All right !
Comme quoi on en apprend tous les jours !!
voilà pourquoi vbfrance est là ! c'est le partage de connaissances.

pense à mettre "Reponse accepter" pour cuq pour valider le topic.

bonne prog à tous



Deluka.
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
6 mars 2006 à 16:59
Bonjour,

Je viens de lire (et copier) les deux post sur GetDateFormat et j'ai beaucoup appris. Alors un grand merci à Cup.

Néanmoins, je suis encore chocolat...
Mon problème : j'ai développé un logiciel qui travaille sur les dates, ex:

DateDuJour=left(Date,5)
DateATrouver="10/11"
If DateDuJour < DateATrouver then bla bla bla

Mais j'ai vu que le format de la date pouvait varier par pays, ou par l'utilisateur qui pouvait définir lui-même son format...

Comment faire ?

Changer le format le temps de la comparaison puis le remettre comme on l'a trouvé ? Oui, mais pour cela faut savoir changer le format...

Une idée, voire une soluce ?

Merci de votre aide.
0
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006
6 mars 2006 à 17:07
Dans ton programme, tu ne peux pas séparer les dates en 3 variables JJ , MM, AAAA?
C'est la solution la plus simple que j'ai trouvé.
En gros lorsque je sais que je vais avoir besoin de travailler avec la date système, je la met directement au format français.
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
7 mars 2006 à 03:32
Ben oui, je vais faire comme ça je crois.
Merci encore.
0
Rejoignez-nous