我确定我不是第一个需要这样做的人,所以我正在寻找最好的方法。
我有一组带有选项的单选按钮,例如
- 今年
- 去年
- 这个月
- 上个月
- 本星期
- 上个星期
我需要从当前日期 ( DateTime.Now
) 生成正确的相对日期范围。
例如,如果Last Year
选择了并且当前日期是4/2/09 14:45:32
我需要返回的开始日期1/1/08 00:00:00
和结束日期12/31/08 23:59:59
。
有什么想法吗?
我确定我不是第一个需要这样做的人,所以我正在寻找最好的方法。
我有一组带有选项的单选按钮,例如
我需要从当前日期 ( DateTime.Now
) 生成正确的相对日期范围。
例如,如果Last Year
选择了并且当前日期是4/2/09 14:45:32
我需要返回的开始日期1/1/08 00:00:00
和结束日期12/31/08 23:59:59
。
有什么想法吗?
所有这些都已使用 DateTime.Today 进行了测试,并且可以按照您的要求工作:
public struct DateRange
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public static DateRange ThisYear(DateTime date)
{
DateRange range = new DateRange();
range.Start = new DateTime(date.Year, 1, 1);
range.End = range.Start.AddYears(1).AddSeconds(-1);
return range;
}
public static DateRange LastYear(DateTime date)
{
DateRange range = new DateRange();
range.Start = new DateTime(date.Year - 1, 1, 1);
range.End = range.Start.AddYears(1).AddSeconds(-1);
return range;
}
public static DateRange ThisMonth(DateTime date)
{
DateRange range = new DateRange();
range.Start = new DateTime(date.Year, date.Month, 1);
range.End = range.Start.AddMonths(1).AddSeconds(-1);
return range;
}
public static DateRange LastMonth(DateTime date)
{
DateRange range = new DateRange();
range.Start = (new DateTime(date.Year, date.Month, 1)).AddMonths(-1);
range.End = range.Start.AddMonths(1).AddSeconds(-1);
return range;
}
public static DateRange ThisWeek(DateTime date)
{
DateRange range = new DateRange();
range.Start = date.Date.AddDays(-(int)date.DayOfWeek);
range.End = range.Start.AddDays(7).AddSeconds(-1);
return range;
}
public static DateRange LastWeek(DateTime date)
{
DateRange range = ThisWeek(date);
range.Start = range.Start.AddDays(-7);
range.End = range.End.AddDays(-7);
return range;
}
今年:
DateTime Today = DateTime.Today;
DateTime StartDate = new DateTime(Today.Year,1,1);
DateTime EndDate = StartDate.AddYears(1).AddSeconds(-1);
这个月:
DateTime Today = DateTime.Today;
DateTime StartDate = new DateTime(Today.Year,Today.Month,1);
DateTime EndDate = StartDate.AddMonths(1).AddSeconds(-1);
本星期:
DateTime Today = DateTime.Today;
DateTime StartDate = Today.AddDays(-((int) Today.DayOfWeek));
DateTime EndDate = StartDate.AddDays(7).AddSeconds(-1);
去年/月/周是上面的简单变化。编辑: 本周假设该周从星期日开始。如果您的星期从星期一开始,您将不得不稍微修改代码。
我将创建一个工厂方法,该方法将返回一个接口(或您可以执行的委托),该接口将传递当前日期并根据实现为您返回日期范围。
当然,您从工厂方法返回的实现将取决于您传递给它的枚举值,该值对应于“今年”、“去年”等。
我将使用 DateTime 内置方法添加和返回日期的特定部分,以编写一个返回间隔的函数。