Как проверить действительную дату в C# (которая имеет тип datetime, а не datetime2)?
Я искал, но не нашел свой ответ, так что прости меня, если этот вопрос дубликат.
У меня есть приложение.Net C#, которое использует Entity Framework (EF) для связи с базой данных SQL Server. Я конвертирую большое количество данных, и мне нужно убедиться, что мои даты являются допустимыми типами даты и времени SQL Server. Мои классы POCO используют тип datetime2 для дат, поэтому дата '0201-04-11 13:00:00 PM' действительна до тех пор, пока в базе данных SQL Server не будет предпринята попытка вставки. Я пытался использовать DateTime.TryParseExact с чем-то вроде этого...
if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid))
{
// Load record into lease payment table table
LoadLeasePayment loadLeasePayment = new LoadLeasePayment();
Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate);
}
Я уверен, что решение очевидно, но я не вижу леса за деревьями. Буду признателен за любую оказанную помощь.
1 ответ
После анализа значения строки DateTime вам необходимо убедиться, что оно находится в диапазоне целевого типа данных SQL. Структура SqlDateTime включает в себя статические поля MinValue и MaxValue, чтобы облегчить это.
if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid))
{
if((datePaid >= SqlDateTime.MinValue) && (datePaid <= SqlDateTime.MaxValue))
{
// Load record into lease payment table table
LoadLeasePayment loadLeasePayment = new LoadLeasePayment();
Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate);
}
}