2009-01-09 7 views
2

Quelqu'un peut-il me dire quelle est l'utilisation de DataSet.Locale et peut-il être utilisé pour résoudre ce problème. Mon serveur est situé aux États-Unis et j'exécute une requête à ce sujet. Les données contenues dans la table à la fois serveur distant (U.S) et local sont identiques.DataSet.Locale ce qu'il fait?

Le problème survient lorsque je récupère le DataSet à l'aide de WebService à partir du serveur distant. La colonne Dates montre la date précédente. Par exemple, Date Column correspond à "14 Jan 2007", mais lorsqu'il est récupéré, il affiche "13 Jan 2007".

Je ne suis pas en mesure d'identifier la cause car tout fonctionne correctement.

Répondre

0

La propriété est utilisée pour déterminer les paramètres régionaux qu'un jeu de données utilisera lorsque les chaînes qu'il contient sont comparées.

Pour plus d'informations, consultez la page de référence MSDN here.

EDIT: Juste en référence à votre problème: Où est la machine 'locale'? Vous n'êtes pas par hasard traversant la ligne de date au serveur?

+0

La machine locale est en Inde –

+0

Ok, si vous interrogez la première chose le matin en Inde, un serveur basé aux États-Unis n'aura pas passé minuit encore. Le problème est-il reproductible à tout moment de la journée? – Nick

+0

Pas tous les moments de la journée, mais il arrive spécialement le matin comme vous l'avez mentionné –

1

Cela ressemble à un problème TimeZone connu: changer DataSet.Locale n'aidera pas.

Consultez l'article de la base de connaissances suivant pour plus d'informations: http://support.microsoft.com/kb/842545.

Regardez également la propriété DataColumn.DateTimeMode, qui contrôle le format de sérialisation d'une colonne DateTime. Si vous le définissez sur DataSetDateTime.Unspecified, aucun décalage n'est ajouté lors de la sérialisation.

+0

J'ai vu que KB. La chose est le produit est tout à fait vieux construit sur 2003 version 1.1. Nous n'avons pas accès au code WebService. Le pity est l'ensemble de données renvoyé contient les dates modifiées. L'utilisation de DataSet.GetXML donne la valeur de décalage qui montre les clients TimeZOne. –

1

Vous rencontrez probablement le problème si la partie heure du type DateTime est 12:00:00. Si cette valeur (14 Jan 2007 00:00) est soumise en EST, elle sera compensée lorsque vous vous déplacez dans les fuseaux horaires de l'Ouest (c.-à-d. 13 janv. 2007 23:00 en CST)

La meilleure façon de contourner est de s'assurer que vous stockez les données DateTime dans un type invariant (le convertir en UTC pr GMT). Ensuite, lorsque vous arrivez à n'importe quel consommateur a besoin des données, ils peuvent changer les données dans la représentation locale-spécifique. Si vous n'êtes pas en mesure de contrôler la façon dont les données sont sauvegardées, assurez-vous de les convertir en un type invariant lors de la récupération, avant de le renvoyer à un client.

Le lien @Joe référencé est utile, sinon voici un livre blanc assez volumineux détaillant les meilleures pratiques concernant le problème.

http://msdn.microsoft.com/en-us/library/ms973825.aspx

Voici un Q'n'A de débordement de la pile en ce qui concerne certaines des technologies les plus récentes, aussi.

Best practices for DateTime serialization in .NET 3.5

Note: il y a un point intéressant dans ce premier lien que j'ajouté sur la sérialisation de certains de ces types de date, selon que vous êtes toujours sur les 1.1/2.0 piles. Faites attention à cela car il m'a mordu quelques fois ;-)