OVH Cloud OVH Cloud

Problème de date

3 réponses
Avatar
Denis
Bonjour tout le monde,

Je me trouve confronté à un sérieux problème avec les dates et j'ignore
totalement comment le résoudre. Dans mon application j'effectue la saisie
de date, soit de façon manuelle ou encore en sélectionnant une date dans le
calendrier. Il va de soi que je vérifie si ce qui est entré est bien une
date valide avec la fonction IsDate. Pas de problème jusque là. Par contre
lorsque mon application tourne sur un ordianteur dont les paramètres
régionaux ne sont pas comme ceux défini sur le mien, le format de date n'est
plus valide. Par exemple dans mon cas les dates sont sous le format
AAAA-MM-JJ, puisque je veux obtenir la date dans ce format, j'oblige aussi
la saisie de 10 caractères pour valider la date. Ma questions est donc de
quelle façon, lorsque je clique sur le calendrier, je peux retourner dans ma
zone de texte, la date sous ce format, peu importe les paramètres établis.

Actuellement, la machine sur laquelle j'ai testé mon application a un format
de date sous le format JJ-MM-AA. Donc, lorsque je clique sur une date dans
le calendrier, la date qui m'est retourné dans ma zone de texte est
26-08-03. Comme de raison puisque je n'ai pas 10 caractères, la validation
est incorrecte. J'avais pensé refaire une String avec la date et la
manipuler à ma guise, mais encore là je ne crois pas que ce soit la solution
idéale. Si je manipule la date qui me serait retourner, pour récupérer les
différentes parties de ma date pour en refaire une String dans le format que
je décide, je serais encore coincé si les paramètres deviennent AA-MM-JJ, je
confondrais alors les jours et les années.

Merci à ceux qui m'apporteront la solution à ce problème.

Denis P

3 réponses

Avatar
John Fuss
Ok, je suis tombé sur le même pbl. La solution consiste à sauvegarder les
params regionaux de l'utilisateur, puis mettre les params regionaux aux
valeurs que tu souhaite et en fin de procédure rétablir les valeurs
sauvegardées. Voici mon bout de code :

Private Function Get_locale() ' Récupère les variables de l'utilisateur
loggé
Dim Symbol As String
Dim iRet1 As Long
Dim iRet2 As Long
Dim lpLCDataVar As String
Dim pos As Integer
On Error GoTo Get_locale_Error

locale = GetUserDefaultLCID()

MyValues.DateFormat = "dd/MM/yyyy"
MyValues.SeparatorData = "/"
MyValues.SDecimal = "."
MyValues.Smie = " "

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE, lpLCDataVar,
0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.SeparatorData = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.DateFormat = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.SDecimal = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.Smie = Symbol

On Error GoTo 0
Exit Function

Get_locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Get_locale dans le Module Mod_JMO" & vbCrLf & "Consulter *******
au service informatique !"
End Function
'*************************
Private Function Set_locale() 'Met tes valeurs :)
Dim iRet As Long
On Error GoTo Set_locale_Error

iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
MyValues.SeparatorData)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
MyValues.DateFormat)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
MyValues.SDecimal)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
MyValues.Smie)

On Error GoTo 0
Exit Function

Set_locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Set_locale dans le Module Mod_JMO" & vbCrLf & "Consulter ********
au service informatique !"
End Function
'**************************
Private Function Restore_Locale() 'remet les valeurs de l'utilisateur ds
l'OS. Attention en mode débuggage tu risques de ne pas passer par cette f°
ce qui pose qq pbl
Dim iRet As Long
On Error GoTo Restore_Locale_Error

iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
YourValues.SeparatorData)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
YourValues.DateFormat)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
YourValues.SDecimal)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
YourValues.Smie)

On Error GoTo 0
Exit Function

Restore_Locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Restore_Locale dans le Module Mod_JMO" & vbCrLf & "Consulter
************ au service informatique !"
End Function


Et voilli-voillou

John Fuss

"Denis" a écrit dans le message de news:
#$
Bonjour tout le monde,

Je me trouve confronté à un sérieux problème avec les dates et j'ignore
totalement comment le résoudre. Dans mon application j'effectue la saisie
de date, soit de façon manuelle ou encore en sélectionnant une date dans


le
calendrier. Il va de soi que je vérifie si ce qui est entré est bien une
date valide avec la fonction IsDate. Pas de problème jusque là. Par


contre
lorsque mon application tourne sur un ordianteur dont les paramètres
régionaux ne sont pas comme ceux défini sur le mien, le format de date


n'est
plus valide. Par exemple dans mon cas les dates sont sous le format
AAAA-MM-JJ, puisque je veux obtenir la date dans ce format, j'oblige aussi
la saisie de 10 caractères pour valider la date. Ma questions est donc de
quelle façon, lorsque je clique sur le calendrier, je peux retourner dans


ma
zone de texte, la date sous ce format, peu importe les paramètres établis.

Actuellement, la machine sur laquelle j'ai testé mon application a un


format
de date sous le format JJ-MM-AA. Donc, lorsque je clique sur une date


dans
le calendrier, la date qui m'est retourné dans ma zone de texte est
26-08-03. Comme de raison puisque je n'ai pas 10 caractères, la


validation
est incorrecte. J'avais pensé refaire une String avec la date et la
manipuler à ma guise, mais encore là je ne crois pas que ce soit la


solution
idéale. Si je manipule la date qui me serait retourner, pour récupérer


les
différentes parties de ma date pour en refaire une String dans le format


que
je décide, je serais encore coincé si les paramètres deviennent AA-MM-JJ,


je
confondrais alors les jours et les années.

Merci à ceux qui m'apporteront la solution à ce problème.

Denis P




Avatar
Denis
Merci John,

Mais je crois avoir trouvé plus simple, il fallait juste y penser.

Je fais simplement
TextBox.Text = Format (Calendar1.Value, "YYYY-MM-DD")
Après tout Windows retourne seulement une série de chiffre pour définir une
date, restait juste à les formater sous le format désiré. Tout ça pour dire
que bien des fois ce sont les choses les plus simples qui arrivent à nous
faire casser la tête un bon moment. Par contre je retiens ta méthode, elle
peut très bien m'être utile un moment donné.

Salut

Denis P

"John Fuss" a écrit dans le message de
news:%
Ok, je suis tombé sur le même pbl. La solution consiste à sauvegarder les
params regionaux de l'utilisateur, puis mettre les params regionaux aux
valeurs que tu souhaite et en fin de procédure rétablir les valeurs
sauvegardées. Voici mon bout de code :

Private Function Get_locale() ' Récupère les variables de l'utilisateur
loggé
Dim Symbol As String
Dim iRet1 As Long
Dim iRet2 As Long
Dim lpLCDataVar As String
Dim pos As Integer
On Error GoTo Get_locale_Error

locale = GetUserDefaultLCID()

MyValues.DateFormat = "dd/MM/yyyy"
MyValues.SeparatorData = "/"
MyValues.SDecimal = "."
MyValues.Smie = " "

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,


lpLCDataVar,
0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.SeparatorData = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,


Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.DateFormat = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.SDecimal = Symbol

iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND, Symbol,
iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
End If
YourValues.Smie = Symbol

On Error GoTo 0
Exit Function

Get_locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Get_locale dans le Module Mod_JMO" & vbCrLf & "Consulter *******
au service informatique !"
End Function
'*************************
Private Function Set_locale() 'Met tes valeurs :)
Dim iRet As Long
On Error GoTo Set_locale_Error

iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
MyValues.SeparatorData)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
MyValues.DateFormat)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
MyValues.SDecimal)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
MyValues.Smie)

On Error GoTo 0
Exit Function

Set_locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Set_locale dans le Module Mod_JMO" & vbCrLf & "Consulter


********
au service informatique !"
End Function
'**************************
Private Function Restore_Locale() 'remet les valeurs de l'utilisateur ds
l'OS. Attention en mode débuggage tu risques de ne pas passer par cette f°
ce qui pose qq pbl
Dim iRet As Long
On Error GoTo Restore_Locale_Error

iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
YourValues.SeparatorData)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
YourValues.DateFormat)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
YourValues.SDecimal)
iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
YourValues.Smie)

On Error GoTo 0
Exit Function

Restore_Locale_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
procédure Restore_Locale dans le Module Mod_JMO" & vbCrLf & "Consulter
************ au service informatique !"
End Function


Et voilli-voillou

John Fuss

"Denis" a écrit dans le message de


news:
#$
> Bonjour tout le monde,
>
> Je me trouve confronté à un sérieux problème avec les dates et j'ignore
> totalement comment le résoudre. Dans mon application j'effectue la


saisie
> de date, soit de façon manuelle ou encore en sélectionnant une date dans
le
> calendrier. Il va de soi que je vérifie si ce qui est entré est bien


une
> date valide avec la fonction IsDate. Pas de problème jusque là. Par
contre
> lorsque mon application tourne sur un ordianteur dont les paramètres
> régionaux ne sont pas comme ceux défini sur le mien, le format de date
n'est
> plus valide. Par exemple dans mon cas les dates sont sous le format
> AAAA-MM-JJ, puisque je veux obtenir la date dans ce format, j'oblige


aussi
> la saisie de 10 caractères pour valider la date. Ma questions est donc


de
> quelle façon, lorsque je clique sur le calendrier, je peux retourner


dans
ma
> zone de texte, la date sous ce format, peu importe les paramètres


établis.
>
> Actuellement, la machine sur laquelle j'ai testé mon application a un
format
> de date sous le format JJ-MM-AA. Donc, lorsque je clique sur une date
dans
> le calendrier, la date qui m'est retourné dans ma zone de texte est
> 26-08-03. Comme de raison puisque je n'ai pas 10 caractères, la
validation
> est incorrecte. J'avais pensé refaire une String avec la date et la
> manipuler à ma guise, mais encore là je ne crois pas que ce soit la
solution
> idéale. Si je manipule la date qui me serait retourner, pour récupérer
les
> différentes parties de ma date pour en refaire une String dans le format
que
> je décide, je serais encore coincé si les paramètres deviennent


AA-MM-JJ,
je
> confondrais alors les jours et les années.
>
> Merci à ceux qui m'apporteront la solution à ce problème.
>
> Denis P
>
>




Avatar
Bismark Prods
Tu peux aussi extraire du calendrier ta date dans une variable Date qui est
en realité un TimeStamp. Et de là tu peux obtenir tout les formats que tu
veux ! Ce genre de format est plus facile à manoeuvrer que de faire un
Format() direct. Si tu dois réutiliser fréquemment la meme date !

"Denis" a écrit dans le message de
news:%23KIHtB%
Merci John,

Mais je crois avoir trouvé plus simple, il fallait juste y penser.

Je fais simplement
TextBox.Text = Format (Calendar1.Value, "YYYY-MM-DD")
Après tout Windows retourne seulement une série de chiffre pour définir


une
date, restait juste à les formater sous le format désiré. Tout ça pour


dire
que bien des fois ce sont les choses les plus simples qui arrivent à nous
faire casser la tête un bon moment. Par contre je retiens ta méthode,


elle
peut très bien m'être utile un moment donné.

Salut

Denis P

"John Fuss" a écrit dans le message de
news:%
> Ok, je suis tombé sur le même pbl. La solution consiste à sauvegarder


les
> params regionaux de l'utilisateur, puis mettre les params regionaux aux
> valeurs que tu souhaite et en fin de procédure rétablir les valeurs
> sauvegardées. Voici mon bout de code :
>
> Private Function Get_locale() ' Récupère les variables de l'utilisateur
> loggé
> Dim Symbol As String
> Dim iRet1 As Long
> Dim iRet2 As Long
> Dim lpLCDataVar As String
> Dim pos As Integer
> On Error GoTo Get_locale_Error
>
> locale = GetUserDefaultLCID()
>
> MyValues.DateFormat = "dd/MM/yyyy"
> MyValues.SeparatorData = "/"
> MyValues.SDecimal = "."
> MyValues.Smie = " "
>
> iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
lpLCDataVar,
> 0)
> Symbol = String$(iRet1, 0)
> iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDATE, Symbol,
> iRet1)
> pos = InStr(Symbol, Chr$(0))
> If pos > 0 Then
> Symbol = Left$(Symbol, pos - 1)
> End If
> YourValues.SeparatorData = Symbol
>
> iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
> lpLCDataVar, 0)
> Symbol = String$(iRet1, 0)
> iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
Symbol,
> iRet1)
> pos = InStr(Symbol, Chr$(0))
> If pos > 0 Then
> Symbol = Left$(Symbol, pos - 1)
> End If
> YourValues.DateFormat = Symbol
>
> iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
> lpLCDataVar, 0)
> Symbol = String$(iRet1, 0)
> iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,


Symbol,
> iRet1)
> pos = InStr(Symbol, Chr$(0))
> If pos > 0 Then
> Symbol = Left$(Symbol, pos - 1)
> End If
> YourValues.SDecimal = Symbol
>
> iRet1 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
> lpLCDataVar, 0)
> Symbol = String$(iRet1, 0)
> iRet2 = GetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,


Symbol,
> iRet1)
> pos = InStr(Symbol, Chr$(0))
> If pos > 0 Then
> Symbol = Left$(Symbol, pos - 1)
> End If
> YourValues.Smie = Symbol
>
> On Error GoTo 0
> Exit Function
>
> Get_locale_Error:
>
> MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
> procédure Get_locale dans le Module Mod_JMO" & vbCrLf & "Consulter


*******
> au service informatique !"
> End Function
> '*************************
> Private Function Set_locale() 'Met tes valeurs :)
> Dim iRet As Long
> On Error GoTo Set_locale_Error
>
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
> MyValues.SeparatorData)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
> MyValues.DateFormat)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
> MyValues.SDecimal)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
> MyValues.Smie)
>
> On Error GoTo 0
> Exit Function
>
> Set_locale_Error:
>
> MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
> procédure Set_locale dans le Module Mod_JMO" & vbCrLf & "Consulter
********
> au service informatique !"
> End Function
> '**************************
> Private Function Restore_Locale() 'remet les valeurs de l'utilisateur ds
> l'OS. Attention en mode débuggage tu risques de ne pas passer par cette



> ce qui pose qq pbl
> Dim iRet As Long
> On Error GoTo Restore_Locale_Error
>
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDATE,
> YourValues.SeparatorData)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SSHORTDATE,
> YourValues.DateFormat)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_SDECIMAL,
> YourValues.SDecimal)
> iRet = SetLocaleInfo(locale, LocalVariables.LOCALE_STHOUSAND,
> YourValues.Smie)
>
> On Error GoTo 0
> Exit Function
>
> Restore_Locale_Error:
>
> MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la
> procédure Restore_Locale dans le Module Mod_JMO" & vbCrLf & "Consulter
> ************ au service informatique !"
> End Function
>
>
> Et voilli-voillou
>
> John Fuss
>
> "Denis" a écrit dans le message de
news:
> #$
> > Bonjour tout le monde,
> >
> > Je me trouve confronté à un sérieux problème avec les dates et


j'ignore
> > totalement comment le résoudre. Dans mon application j'effectue la
saisie
> > de date, soit de façon manuelle ou encore en sélectionnant une date


dans
> le
> > calendrier. Il va de soi que je vérifie si ce qui est entré est bien
une
> > date valide avec la fonction IsDate. Pas de problème jusque là. Par
> contre
> > lorsque mon application tourne sur un ordianteur dont les paramètres
> > régionaux ne sont pas comme ceux défini sur le mien, le format de date
> n'est
> > plus valide. Par exemple dans mon cas les dates sont sous le format
> > AAAA-MM-JJ, puisque je veux obtenir la date dans ce format, j'oblige
aussi
> > la saisie de 10 caractères pour valider la date. Ma questions est


donc
de
> > quelle façon, lorsque je clique sur le calendrier, je peux retourner
dans
> ma
> > zone de texte, la date sous ce format, peu importe les paramètres
établis.
> >
> > Actuellement, la machine sur laquelle j'ai testé mon application a un
> format
> > de date sous le format JJ-MM-AA. Donc, lorsque je clique sur une date
> dans
> > le calendrier, la date qui m'est retourné dans ma zone de texte est
> > 26-08-03. Comme de raison puisque je n'ai pas 10 caractères, la
> validation
> > est incorrecte. J'avais pensé refaire une String avec la date et la
> > manipuler à ma guise, mais encore là je ne crois pas que ce soit la
> solution
> > idéale. Si je manipule la date qui me serait retourner, pour


récupérer
> les
> > différentes parties de ma date pour en refaire une String dans le


format
> que
> > je décide, je serais encore coincé si les paramètres deviennent
AA-MM-JJ,
> je
> > confondrais alors les jours et les années.
> >
> > Merci à ceux qui m'apporteront la solution à ce problème.
> >
> > Denis P
> >
> >
>
>