DateTime.ParseExact с переменной долей секунд - PullRequest
2 голосов
/ 27 сентября 2019

Я должен разобрать время, указанное в часах, минутах, секундах и долях секунд.Например,

"15:42:58.1"
"15:42:58.21"
"15:42:58.417"

с использованием следующего кода:

DateTime.ParseExact("15:42:58.1", "HH:mm:ss.0.f", CultureInfo.InvariantCulture);

Это работает только с одним десятичным знаком.Любой другой десятичный дробь вызовет исключение.

Вопрос:

  • Существует ли общая возможность для количества десятичных знаков в секундах?

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Вы можете использовать массив DateTimeFormat.как

string[] validFormats = { "HH:mm:ss.f", "HH:mm:ss.ff", "HH:mm:ss.fff" };
DateTime.ParseExact("15:42:58.1", validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None);

Теперь это будет анализировать ваш DateTime, даже если вы дробите 3 цифры

.net Fiddle

1 голос
/ 27 сентября 2019

Вы можете использовать TimeSpan, если это время дня или подобное.См. Пользовательские строки формата TimeSpan .Трюк из комментария Йероена Мостерта к вашему вопросу по-прежнему применяется: Используйте заглавные буквы F s.

Вы должны экранировать разделители со строками формата TimeSpan.Поэтому используйте одно из:

var ts1 = TimeSpan.ParseExact("15:42:58.1", @"hh\:mm\:ss\.FFFFFFF", CultureInfo.InvariantCulture);
var ts2 = TimeSpan.ParseExact("15:42:58.1", "hh':'mm':'ss'.'FFFFFFF", CultureInfo.InvariantCulture);

Похоже, что это работает даже с конечными нулями, например, "15:42:58.10" анализирует ОК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...