Как сделать вычитание даты через DataTime?
Всем привет. Я хотел сделать вычитание времени, но сегодня, то что написано теперь не работает.
Мне нужно сделать что-то типо подписки. Я выдаю её на условный месяц и оно должно считать дни до конца её окончания. Вот код, который у меня был:
Ошибку, к слову, выдаёт такую - Исключение не обработано System.FormatException: "Входная строка имела неверный формат."
static int BigBrainMath()
{
var aa = Form1.static_MFI.End.ToString();
string year = string.Empty;
string month = string.Empty;
string day = string.Empty;
int counter = 0;
foreach (var i in aa)
{
if (counter == 1 || counter == 2)
{
day += i;
}
if (counter == 3 || counter == 4)
{
month += i;
}
if (counter == 5 || counter == 6)
{
year += i;
}
counter++;
}
DateTime dt = new DateTime(2000 + int.Parse(year), int.Parse(month), int.Parse(day));
//ошибку помечает на строке выше.
TimeSpan ot = dt - DateTime.Now;
return (int)((float)ot.TotalDays);
}
Ответы (2 шт):
Очевидно, ваш код ожидает, что в строке aa окажутся 6 символов, которые вы хотите разделить на день, месяц и год, после чего превратить их в дату.
Вместо цикла и всего такого проще воспользоваться DateTime.TryParseExact:
if (DateTime.TryParseExact(
aa, "ddMMyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var dt))
{
TimeSpan ot = dt - DateTime.Today;
...
}
else
{
// в aa не было даты в нужном формате
// как-то отреагировать на ошибку тут
}
Спасибо всем большое, что пытались помочь. Я нашел ошибку. Она была в первой форме. После того, как я добавил еще одну функцию, на ней все заканчивалось return true; и переменная aa не могла получить данные из бд, т.к. шла после.
Извините за неточный вопрос, а ещё за то, что скинул не всё что нужно. Всем удачи !