获取系统日期时间外的月份

本文关键字:时间 系统 日期 获取 | 更新日期: 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);