Как проверить действительную дату в 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);
    }
}
Другие вопросы по тегам