c#:如何获取特定时间段的上一个年初至今和上一个月初至今?

Posted

技术标签:

【中文标题】c#:如何获取特定时间段的上一个年初至今和上一个月初至今?【英文标题】:c#: How do I get the previous year-to-date and previous month-to-date for specific time periods? 【发布时间】:2017-06-19 17:52:07 【问题描述】:

使用 c#,我想将当前周至今与上周至今的同一时期进行比较。例如,如果今天是星期三,并且如果一周的第一天是星期日,那么我想比较本周星期日 - 星期二与上周星期日 - 星期二的总数。我没有计算星期三,因为直到当天午夜我才拥有一整天的数据。

同样适用于将此 mtd 与上个月和去年的相同天数进行比较。例如,如果当前日期是 6 月 19 日,我想将上个月 5 月 1 日至 18 日以及去年 1 月 1 日至 6 月 18 日的数据与今年 1 月 1 日至 6 月 18 日的数据进行比较。

我尝试使用的变量如下所示:

//Current dates
DateTime currentDte = DateTime.Now;
DateTime beginWeek = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
DateTime beginMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
DateTime beginYear = new DateTime(DateTime.Now.Year, 1, 1);

//Historical dates
DateTime lastWeekToDate = DateTime.Now.StartOfWeek(DayOfWeek.Sunday - (7 - (int)DateTime.Now.DayOfWeek));
DateTime lastMonthToDate =
DateTime lastYearToDate =

如您所见,我计算出了当前日期,并可以遍历它们以获取我需要的 wtd、mtd 和 ytd 数据。我设法弄清楚如何获得我需要的最后一周。

但我不知道如何获取我需要的 lastMonthToDate 和 lastYearToDate 日期。我已经尝试了我能想到的一切。我已经阅读了日期文档,直到我的眼睛受伤,但我仍然想出了鹅蛋。谁能给点建议?

【问题讨论】:

如果我理解正确lastMonthToDate 是当前日期的前一个月,而lastYearToDate 使用的是最后一年 - 对吗? 我不确定您遇到了什么问题。 DateTime 只能代表一个日期时间。所以如果你想要一个DateTime 是上个月的第一天,那么你为什么不直接做beginMonth.AddMonths(-1) 呢?您已经弄清楚了获取当月第一天的逻辑,因此只需减去一个月。 如果我不清楚,我深表歉意。我确实想要一个具体的日期。例如,如果今天是 2017 年 6 月 19 日,我想要 2017 年 5 月 19 日和 2016 年 6 月 19 日。我该怎么做? 又困惑又好笑,你是对的。 【参考方案1】:

如果我正确理解您的问题,您只需使用AddMonthsAddYears

DateTime lastMonthToDate = beginMonth.AddMonths(-1);
DateTime lastYearToDate  = beginYear.AddYears(-1);

编辑

根据您的评论 - 看起来您希望从当前日期减去月/年,在这种情况下会是

DateTime lastMonthToDate = currentDte.AddMonths(-1);
DateTime lastYearToDate  = currentDte.AddYears(-1);

如果是一天中的某个时间让你失望,只需使用日期部分DateTime.Now.Date.AddMonths(-1)

【讨论】:

泽夫,我怎么也得去年年初? - 没关系,我是根据你的例子得到的。非常感谢!【参考方案2】:

根据我从 Zeph 收到的反馈,我能够使用此代码获得去年初的数据:

DateTime startDate = beginYear.AddYears(-1); 

现在我可以根据间隔日期计算我需要的所有 ytd 数据。非常感谢!

【讨论】:

以上是关于c#:如何获取特定时间段的上一个年初至今和上一个月初至今?的主要内容,如果未能解决你的问题,请参考以下文章

Access SQL 中按月份的年初至今摘要

C#中获取当前月的时间

java 代码如何获取当前时间的上一个月的月末时间..

java如何获取当天的上一个月

如何获取不是兄弟姐妹的特定类的上一个和下一个元素

如何从数据库c#中创建多年的下一个和上一个按钮