Парсинг DateTime, содержащего миллисекунды, перестал работать для определенных культур. Почему?

Я пытаюсь проанализировать строку, содержащую миллисекунды как это:

string s = "11.05.2010 15:03:08.7718687"; // culture: de-CH
DateTime d = DateTime.Parse(s); // works

Однако, например, под локалью de-DE, десятичный разделитель является запятой (не точка). Таким образом, пример становится:

string s = "11.05.2010 15:03:08,7718687"; // culture: de-DE (note the comma)
DateTime d = DateTime.Parse(s); // throws a FormatException

Это странно мне тот DateTime. Синтаксический анализ (анализы) должен бросить FormatException теперь, когда он, как предполагается, использует CultureInfo. CurrentCulture, чтобы сделать парсинг. Даже передавая CurrentCulture, поскольку аргумент явно не помогает ни одному. У кого-либо есть идея, почему это не работает? Не делает парсинга, берут NumberFormatInfo. NumberDecimalSeparator во внимание?

6
задан Jonathan Leffler 5 May 2012 в 01:43
поделиться

1 ответ

DateTimeFormatInfo применяется к форматированию / синтаксическому анализу дат, а не NumberFormatInfo. DateTimeFormatInfo не определяет разделитель «секунды / миллисекунды», который может быть перегружен различными культурами.

Ни одна из строк стандартного формата даты и времени не отображает миллисекунды, за исключением обратного хода, который в любом случае не зависит от языка и региональных параметров. Таким образом, вы не должны столкнуться со строкой в ​​этом формате, если только ваш собственный код не генерирует ее. Если вы знаете, что ваш код будет генерировать даты в этом формате, вы можете предоставить строку настраиваемого формата, в которой запятая используется в качестве разделителя между секундами и миллисекундами.

4
ответ дан 17 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: