OVH Cloud OVH Cloud

Conversion de date par un webservice

2 réponses
Avatar
Franck
Bonjour,
Une webmethod de mon webservice prend un parametre de type string
repr=E9sentant une date (sens=E9 repr=E9senter une date). De cette
mani=E8re, le user est libre de saisir une date selon le format qui lui
plait.

en gros, =E7a donne GetPrice("31/12/2005") ou GetPrice("31/12/05"),
etc...

Manque de bol, =E7a me pause un probl=E8me d'ambiguit=E9 selon les
param=E8tres regionaux du client.

Si le user saisie 1/5/05. Selon qu'il se trouve en M/d/yy ou d/M/yy,
l'interpretation est compl=E9tement diff=E9rente.

Je bataille avec les Date.Parse et autre CultureInfo de mes threads
mais sans succ=E8s !

Personne n'aurait une fonction "universelle" de conversion ?
Ou un moyen de d=E9terminer le format de date du user son sa saisie et
ses param regionaux...

Enfin voila.

merci de votre aide.

2 réponses

Avatar
Hervé HERRY
Bonjour Franck,

Ta question va peut-être bientôt me concerner également, aussi j'ai consulté
ma référence récemment achetée : "C# et .NET" 2e édition de Gérard LEBLANC
(Eyrolles). Il semble qu'il existe déjà un parser capable de prendre en
compte la culture pour interpréter la date saisie par l'utilisateur :

using System;
using System.Globalization;

string s = "14/7/1789";
DateTime dt = DateTime.Parse( s );

Ce bout de code ne fonctionnera que dans les pays francophones car Parse
prend en compte la culture du pays dans lequel il est exécuté. Ailleurs, ce
code génèrera une exception. Toutefois, si la chaîne 's' est saisie par
l'utilisateur, c'est à priori ce que tu recherches.

Dans le cas de dates saisies "en dur" dans ton code, il faut préciser au
parser selon quelle culture la chaîne a été saisie :

string s = "14/7/1789";
DateTime dt = DateTime.Parse( s, new CultureInfo("fr-FR"));

Ensuite, pour éviter toute ambiguïté, je pense qu'il est mieux d'informer
l'utilisateur du format de saisie attendu en tenant compte toujours de la
culture :

string ts = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

Ci-dessous le lien de la classe DateTimeFormatInfo retournée par la
propriété DateTimeFormat du précédent exemple :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemglobalizationdatetimeformatinfoclasstopic.asp

En espérant que ça t'aideras.
Tiens-moi au courant si ça fonctionne ! ;-)

--
Hervé HERRY
Ingénieur R&D
ACTARIS metering systems

"Franck" a écrit dans le message de
news:
Bonjour,
Une webmethod de mon webservice prend un parametre de type string
représentant une date (sensé représenter une date). De cette
manière, le user est libre de saisir une date selon le format qui lui
plait.

en gros, ça donne GetPrice("31/12/2005") ou GetPrice("31/12/05"),
etc...

Manque de bol, ça me pause un problème d'ambiguité selon les
paramètres regionaux du client.

Si le user saisie 1/5/05. Selon qu'il se trouve en M/d/yy ou d/M/yy,
l'interpretation est complétement différente.

Je bataille avec les Date.Parse et autre CultureInfo de mes threads
mais sans succès !

Personne n'aurait une fonction "universelle" de conversion ?
Ou un moyen de déterminer le format de date du user son sa saisie et
ses param regionaux...

Enfin voila.

merci de votre aide.
Avatar
Roman
"Hervé HERRY" a écrit :

Ensuite, pour éviter toute ambiguïté, je pense qu'il est mieux d'informer
l'utilisateur du format de saisie attendu en tenant compte toujours de la
culture :



Je suis d'accord avec Hervé, il vaut mieux mettre des restrictions pour la
saisie
de date, sinon vous risquez d'avoir une usine à gaz et une source de bugs
supplémentaire :)