获取系统日期时间外的月份
本文关键字:时间 系统 日期 获取 | 更新日期: 2023-09-27 18:27:14
我的数据库中有包含以下文件的数据。
Id | name | RegDate
1 John 2014-09-05
2 mike 2014-09-05
3 Duke 2014-10-14
我正在执行一个查询,以计算注册日期等于09的值的数量。09是日期所在的月份。
我试图将我存储在数据库中的日期转换为月份格式,然后获取系统日期的新月份以获得结果。
这是我在linq中的查询,但它一直给出错误的计数。求你了,我需要你的帮助。谢谢
var CountPassengers = (from c in db.CountPassengerManifestViews where c.DepartureDate.Month.ToString()== DateTime.Now.AddMonths(-1).ToString("MM") select c).Count();
我强烈建议您取消所有字符串操作。您的查询在概念上与字符串无关,那么为什么要将它们引入代码中呢?
您可以将查询写成:
int currentMonth = DateTime.Today.AddMonths(-1).Month;
var passengerCount = db.CountPassengerManifestViews
.Count(c => c.DepartureDate.Month == currentMonth);
然而,这将仅按月份进行筛选,而不会按月份和年份进行筛选,因此如果您有2013年的数据,也会包括在内。你更可能想要这样的东西:
DateTime oneMonthAgo = DateTime.Today.AddMonths(-1);
DateTime start = oneMonthAgo.AddDays(1 - oneMonthAgo.Day);
DateTime end = start.AddMonths(1);
var passengerCount = db.CountPassengerManifestViews
.Count(c => c.DepartureDate >= start &&
c.DepartureDate < end);
这样你就表达了一系列的日期,而不仅仅是提取月份的部分。
where c.DepartureDate.Month == DateTime.Now.AddMonths(-1).Month
您不比较字符串表示,因为它已经转换为DateTime对象,所以按您的方式进行比较是没有意义的。这个简单的改变就足够了。
我不确定您为什么要进行字符串操作,但如果您只想比较两个日期的月份部分,请执行以下操作:
where c.DepartureDate.Month== DateTime.Now.AddMonths(-1).Month
我认为您的代码将给出"9"的Month.ToString()与给出"09"的ToString("MM")进行比较。您还可以通过删除".ToString()"进行改进:
int lastMonth = DateTime.Now.AddMonths(-1).Month;
var CountPassengers = (from c in db.CountPassengerManifestViews where c.DepartureDate.Month == lastMonth select c).Count();
问候
试试这个
var CountPassengers = (from c in db.CountPassengerManifestViews
where c.DepartureDate.Month.ToString("MM")== DateTime.Now.AddMonths(-1).ToString("MM")
select c).Count();
var month = DateTime.Now.AddMonths(-1).Month;
var CountPassengers = db.CountPassengerManifestViews.Count(c => c.DepartureDate.Month == month);