Использование значения строки при проверке того, равно ли значение datetime сейчас
Привет,
Я создал этот фрагмент кода, чтобы проверить каждую ячейку в определенном столбце, а затем изменить цвет сетки в соответствии с некоторыми критериями, созданными в предложении If.
lblTime.Text = DateTime.Now.ToString(); foreach (DataGridViewRow row in dgw.Rows) { var now = DateTime.Now; var cellDate = DateTime.Parse(row.Cells[5].Value.ToString()); var forTenDays = now.AddDays(+10); if (now > cellDate) { //row.DefaultCellStyle.BackColor = Color.Red; row.Cells[5].Style.BackColor = Color.Red; } else if ((now < cellDate) && (cellDate < forTenDays)) { row.Cells[5].Style.BackColor = Color.Yellow; } else { row.Cells[5].Style.BackColor = Color.YellowGreen; } }
Но неожиданно я наткнулся на эту ошибку на этой линии:
var cellDate = DateTime.Parse(row.Cells[5].Value.ToString());
Ошибка:
Цитата:Строка не была распознана как допустимая дата и время
Что я уже пробовал:
Мне удалось заставить код работать примерно 1 месяц, ничего не меняя и не меняя фактического поведения, но теперь он внезапно перестал работать. Изменился с vs2017 на vs2013.
Я пробовал Date. ParseExact(); но тоже не сработало. дает-мне ту же ошибку.
F-ES Sitecore
Вам нужно использовать DateTime.TryParseExact и используйте формат даты, который есть в ячейке. В общем, никогда не оставляйте эти вещи предположениям, не используйте просто "ToString()" на датах и не используйте просто "Parse", поскольку нет глобальных форматов, код использует настройки на машине, чтобы получить формат, который делает этот код очень хрупким, как вы выясняете. Всегда работайте с определенными форматами, как при преобразовании в строки, так и при обратном разборе.