Я пытаюсь получить строку TimeSpan из "24:30:00", чтобы определить cacheOptions в C#, но получаю 24 дня вместо 24 часов.
string cacheExpirationTime = "24:00:00";
var cacheOptions = new MemoryCacheOptions()
{
ExpirationScanFrequency = TimeSpan.Parse(cacheExpirationTime, CultureInfo.InvariantCulture)
};
Я также пробовал без использования CultureInfo, но это не сработало.
Как правильно это сделать?





По умолчанию TimeStamp предполагает, что входная строка представляет продолжительность времени в формате days.hours:minutes:seconds, поэтому вам нужно использовать строку пользовательского формата с методом TimeSpan.ParseExact() следующим образом:
string cacheExpirationTime = "24:00:00";
var cacheOptions = new MemoryCacheOptions()
{
ExpirationScanFrequency = TimeSpan.ParseExact(cacheExpirationTime, @"h\:mm\:ss", CultureInfo.InvariantCulture)
};
Если вы хотите использовать формат чч:мм:сс. Вам необходимо указать формат, здесь используется «чч:мм:сс». чч — часы, мм — минуты, сс — секунды.
Имейте в виду, что нельзя использовать 24:00:00, поскольку это недопустимое значение для объекта TimeSpan. Максимально возможное значение для объекта TimeSpan — 23:59:59, поэтому любое значение больше этого вызовет исключение OverflowException.
string cacheExpirationTime = "23:59:59";
string format = "hh\\:mm\\:ss";
var cacheOptions = new MemoryCacheOptions()
{
ExpirationScanFrequency = TimeSpan.ParseExact(cacheExpirationTime, format, CultureInfo.InvariantCulture)
};
Необходимость экранирования двоеточия с помощью обратной косой черты в строке формата TimeSpan, в отличие от строки формата DateTime, на самом деле является недостатком дизайна в .NET.
Этот код выдает OverflowException.
24 часа — это 1 день, поэтому вы должны отформатировать его как таковой.
string cacheExpirationTime = "1.00:00:00";
var cacheOptions = new MemoryCacheOptions()
{
ExpirationScanFrequency = TimeSpan.Parse(cacheExpirationTime, CultureInfo.InvariantCulture)
};
Похоже, что отправка 24:00:00 вызывает исключение переполнения, поэтому вместо этого я изменил значение на 12.
@Aritzbn, вы правы, отредактировал мой пример, чтобы удалить пользовательский формат. Просто используйте первый пример.
Этот код выдает
OverflowException.