2009-10-12 6 views
1

J'ai une fonction qui analyse une chaîne contenant une date (et/ou une heure), par ex. "2009-12-10". Je reçois l'ordre de l'année-mois-jour à partir du modèle de date courte. En passant par la chaîne j'utilise Char.IsSeparator (ch) pour savoir quand les nombres se terminent.Région Agnostique Char.IsSeparator (ch)?

Maintenant, cependant, dans le cas du coréen, il semble que le Char.IsSeparator (ch) renvoie false sur les caractères de séparation. Y a-t-il un moyen de savoir si les caractères entre les nombres sont séparateurs indépendamment du réglage de la région?

(je aussi parser des chaînes qui sont plus contenant sans des choses comme « * 20 mai 200 * 9 » faisant Char.IsAlphaNum() sur le séparateur ne fonctionnera pas non plus que je ne sais pas fondamentalement le contenu)

Exemples d'entrées: "20.10.2009" "2009-05-20" "20 mai 2009" "20.05.2009 10:00 AM" "1/1/2009" (à Singapour, D/M/Y en US c'est M/D/Y ")" Tisdag, 1 janvier 1962 "(toutes les chaînes sont localisées)

La sortie serait l'équivalent d'une instance de DateTime remplie autant que possible (bien que nous utilisions nos propres types)

Coréen semble avoir un couple de caractères en face de l'heure et en tant que séparateur, il semble que les symboles sont différents en fonction de la position dans la chaîne.

+0

Couldn Ne prenez-vous pas l'approche inverse et utilisez la région correcte pour chaque comparaison à la place? –

+0

Pouvez-vous donner quelques exemples d'entrée et de sortie attendue? –

Répondre

0

Y a-t-il une raison pour laquelle vous devez analyser la chaîne manuellement?

Si vous avez utilisé les méthodes de l'analyse date/heure intégrée - Parse, ParseExact, TryParse ou TryParseExact - vous pourriez passer l'info format spécifique à la culture nécessaire et laisser le souci cadre sur les séparateurs, etc.

+0

Je pense qu'avec des mains libres et une pleine compréhension de ce que fait ce module de formatage, j'aurais pu le faire maintenant, mais quand je l'ai fait, c'était principalement de porter un code C non géré C#. D'autant plus que le formatage doit être exactement comme avant (cette routine est utilisée par d'autres et ainsi de suite). –

+0

Vous avez raison. J'ai juste jeté dehors les choses et l'ai réécrit en utilisant les méthodes .NET standard. Merci de m'avoir montré la lumière :) –

2

Si vous prenez le format en utilisant le format court courant, vous pourriez peut-être également être en mesure de ramasser le séparateur par DateTimeFormatInfo.CurrentInfo.DateSeparator.

+0

Lorsque je regarde dans le débogueur, il semble que son '-' mais en regardant la date complète a les caractères coréens. –

Questions connexes