2010-10-25 17 views
3

J'essaie de faire une petite application pour un projet dans lequel les clients du monde entier peuvent utiliser. Le problème que j'ai est que le back-end est configuré en utilisant des fichiers XML qui sont générés et téléchargés sur un réseau partagé et dans ces fichiers XML, je stocke une variable de date qui indique quand une tâche particulière a commencé et terminé. Le programme se bloque à certains intervalles de chargement avec une exception de format et après quelques recherches, j'ai découvert que j'avais besoin de configurer un analyseur régional de l'heure. La question que j'ai est de savoir comment puis-je convertir l'heure dans le fichier XML, que ce soit en utilisant les paramètres régionaux US, AU ou UK, et qu'il utilise les paramètres locaux du client. Ceci est fait en utilisant VS C# 2005 et le framework .NET 3.5.C# analyser les chaînes de date régionales

Merci d'avance pour votre aide.

+0

Pouvez-vous publier votre code d'analyse de date actuel? – Oded

Répondre

8

Les backends devrait être écrit dans un format standard. Le XML ne devrait pas seulement utiliser le format de date locale -. que la folie est ainsi le point principal de XML est d'être un format d'échange pour les ordinateurs , et non pour les humains à moins que vous formatez quelque chose pour la consommation humaine, vous shouldn. ne pas utiliser la variation locale. Utilisez donc un format spécifique partout, en spécifiant CultureInfo.InvariantCulture lors du formatage, ou utilisez dt.ToString("o") ou une autre des chaînes au format culture invariant. Si vous parlez juste d'un point dans le temps (c'est-à-dire l'heure locale n'a pas d'importance, juste l'instant global) également assurez-vous d'utiliser un fuseau horaire cohérent, où UTC est le choix évident . Par exemple, utilisez DateTime.UtcNow au lieu de DateTime.Now.

Une fois que vous avez le code génération faire des choses sensibles, consommation il devrait être très simple.

Si, cependant, vous n'avez pas le luxe de changer le code de génération, vous peut avoir recours à passer le droit CultureInfo en DateTime.TryParseExact. Cependant, cela signifie que vous devrez connaître la culture utilisée pour créer le fichier. Si les fichiers sont générés de manière sensible à la culture et que vous ne savez pas quelle culture ils utilisent, vous êtes fondamentalement bourré. Par exemple, 03/05/2010 pourrait signifier le 5 mars 2010 ou le 3 mai 2010. Sans plus d'informations, vous n'avez aucun moyen de décider lequel utiliser.

1

Les paramètres régionaux impliquent un format. C'est pas votre principale préoccupation. Format est simple (utiliser un DateTime.Parse ou .ParseExact. Les fuseaux horaires devraient être votre principale préoccupation.

S'il vous plaît se référer à How to convert string to local Date Time?

+0

Les fuseaux horaires sont * aussi * simples si vous vous souciez seulement d'un instant dans le temps, ce qui semble être le cas ici (représentant le début ou la fin d'une tâche) - représente tout simplement UTC. –

+0

Absolument, Jon. Utc est le chemin à parcourir. Mon but est de faire en sorte que l'utilisateur considère les fuseaux horaires comme étant plus un problème de format. Il y a beaucoup de choses construites dans .NET pour consommer/sortir différents formats, mais si vous ne stockez pas de données de fuseau horaire (ou de dates de stockage comme UTC) alors vous ne pourrez pas être précis. – Brad