2009-10-12 3 views
1

У меня есть функция, которая анализирует строку, содержащую дату (и/или время), например. "2009-12-10". Я получаю заказ года-месяца-дня из шаблона «Краткая дата». При прохождении строки я использую Char.IsSeparator (ch), чтобы выяснить, когда числа заканчиваются.Регион Агностический Char.IsSeparator (ch)?

Теперь, однако, в случае с корейским кажется Char.IsSeparator (ch) возвращает false на символах разделителя. Есть ли способ узнать, являются ли символы между номерами разделителями независимо от настроек региона?

(я также разобрать строки, которые более свободны, содержащие такие вещи, как «* 20 мая 200 * 9» тем самым Char.IsAlphaNum() на сепараторе не будет работать, как я не знаю, содержание в основном)

Примеры ввода: «20.10.2009» «2009-05-20» «20 мая 2009» «20.05.2009 10:00» «1/1/2009» (в Сингапуре его D/M/Y в US это M/D/Y ")" Tisdag, 1 Januari 1962 "(все строки локализованы)

Вывод будет эквивалентным экземпляру DateTime, заполненному как можно больше (хотя мы используем наши собственные типы).

У корейца, похоже, есть пара символов перед временем, и в качестве разделителя он выглядит так, что символы различаются в зависимости от позиции в строке.

+0

не могли вы придерживаетесь противоположного подхода и вместо этого используете правильную область для каждого сравнения? –

+0

Можете ли вы привести несколько примеров ввода и ожидаемого вывода? –

ответ

0

Есть ли причина, по которой вам нужно разобрать строку вручную?

Если вы использовали встроенную дату/время синтаксического анализа методов - Parse, ParseExact, TryParse или TryParseExact - тогда вы могли бы пройти в требуемой культуре конкретной информации формата и пусть рамочный беспокоиться о сепараторах и т.д.

+0

Я думаю, что со свободными руками и полным пониманием того, что этот модуль форматирования я мог бы сделать это сейчас, но когда я это делал, это было главным образом для порта неуправляемого C-кода C#. Тем более, что форматирование должно быть как раньше (эта процедура используется другими и т. Д.). –

+0

Вы правы. Я просто выбросил материал и переписал его с использованием стандартных методов .NET. Спасибо, что показал мне свет :) –

2

Если вы выберете формат, используя текущий короткий формат, возможно, вы также сможете подобрать разделитель через DateTimeFormatInfo.CurrentInfo.DateSeparator.

+0

Когда я смотрю в отладчике, это кажется его «-», однако, глядя на полную дату, есть корейские символы. –

Смежные вопросы