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】:
如果我正确理解您的问题,您只需使用AddMonths
和AddYears
。
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#:如何获取特定时间段的上一个年初至今和上一个月初至今?的主要内容,如果未能解决你的问题,请参考以下文章