C#中年,月和日参数的不可表示的DateTime

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中年,月和日参数的不可表示的DateTime相关的知识,希望对你有一定的参考价值。

我正面临一些错误,如“年,月,日参数描述不可表示的DateTime”。但是当我使用另一个数据库时出现这个问题,否则我写的代码工作正常。

为了检查目的,我将我的PC日期时间从11月改为12月,而不是相同的代码在不同的数据库工作正常。但我没有得到如何解决这个错误。我在它崩溃的地方附上了一些代码。

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();

这种错误的解决方案是什么?

答案

我希望在这一行上发生错误:

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在一个月内(如11月)只有30天,那该怎么办?或者它有另一个非法值,如<0或> 31?

你需要决定如何处理它。你能忽略高于本月天数的价值吗?有一种DaysInMonth方法可以在这里使用。

以上是关于C#中年,月和日参数的不可表示的DateTime的主要内容,如果未能解决你的问题,请参考以下文章

输入一个天数和年,求月和日(有平年和闰年)

输入一个天数和年,求月和日(有平年和闰年)

PHP中date函数月和日带0问题

oracle时间戳6转换为sql server datetime2错误

检测和求和年、月和日

按月和日过滤 django 日期时间字段的问题