2013-11-21 1 views
0

Я столкнулся с некоторой ошибкой, например, «Параметры Year, Month и Day» описывают не представимую DateTime ». Но эта проблема возникает, когда я использую другую базу данных, иначе код, который я написал, работает нормально.Невозможно представить DateTime для параметров года, месяца и дня в C#

Для проверки цели я изменил свой ПК Дата-время с ноября по декабрь, чем тот же код в другой базе данных, работающий нормально. Но я не понимаю, как решить эту ошибку. Я прикрепил код ниже, где он сбой.

var vi = session.Query<TJERecurMaster>().ToList(); 

       TJEShedulDetail tp = new TJEShedulDetail(); 

       var RecurMasterList = (from v in vi 
             join jj in session.Query<TJEShedulDetail>() 
             on v.FMasterID equals jj.TJERecurMaster.FMasterID into jjv 
             from jv in jjv.DefaultIfEmpty(tp) 
             where v.FInactive == false && v.TSCCompany == objCompany && v.TSCProperty == objProp 
             orderby v.FDescription descending 
             select new RecurMasterNotification 
             { 
              TSCompanyID = CompanyID, 
              JeRecurDetail = v.TJERecurDetails, 
              FMasterID = v.FMasterID, 
              FScheduleID = jv.FScheduleID, 
              FDescription = v.FDescription, 
              FPostdate = jv.FLastNotification != null ? jv.FLastNotification : (v.FSetDay != 0 ? new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay)) : DateTime.Now), 

              FAmount = v.TJERecurDetails.Where(P => P.FTranType == "D").Sum(P => P.FAmount) 
                 - v.TJERecurDetails.Where(P => P.FTranType == "C").Sum(P => P.FAmount), 
              FLastCreated = jv.FLastNotification, 
              FNotes = v.FNotes, 
              FJEType = v.FJEType, 
              FInactive = v.FInactive, 
              Frequency = jv.FFrequency, 
              FDateSelection = jv.FDateSelection, 
              FNextNotification = jv.FNextNotification, 
              FLastCreatedString = jv.FLastNotification == jv.FNextNotification ? string.Empty : jv.FLastNotification.ToString(), 
             }).ToList(); 

Какое решение проблемы данного типа ошибки?

+0

Whatq - это база данных, версия NHibernate и данные образца для даты/времени, которая бросает исключение? – Tony

+0

sql server 2008R2, версия Nhibernate 3.2.0.4000 и DateTime (2013, 11, 31) –

+0

Как указал Ханс Кестинг, ноябрь имеет 30 дней, а не 31. – Tony

ответ

2

Я ожидаю, что ошибка происходит на этой линии:

FPostdate = jv.FLastNotification != null ? jv.FLastNotification : (v.FSetDay != 0 ? new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay)) : DateTime.Now) 

и конкретно эта часть:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay)) 

Здесь вы создаете новую дату от текущего года и месяца, а некоторые v.FSetDay. Но что, если этот FSetDay составляет 31 месяц (например, ноябрь), который имеет только 30 дней? Или у него есть другая незаконная ценность, например < 0 или> 31?

Вам нужно решить, как с этим справиться. Можете ли вы просто игнорировать значения, которые превышают количество дней в этом месяце? Существует метод DaysInMonth, который может быть полезен здесь.

Смежные вопросы