9

我确定我不是第一个需要这样做的人,所以我正在寻找最好的方法。

我有一组带有选项的单选按钮,例如

  • 今年
  • 去年
  • 这个月
  • 上个月
  • 本星期
  • 上个星期

我需要从当前日期 ( DateTime.Now) 生成正确的相对日期范围。

例如,如果Last Year选择了并且当前日期是4/2/09 14:45:32我需要返回的开始日期1/1/08 00:00:00和结束日期12/31/08 23:59:59

有什么想法吗?

4

4 回答 4

27

所有这些都已使用 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;
}
于 2009-04-02T19:06:34.213 回答
9

今年:

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);

去年/月/周是上面的简单变化。编辑: 本周假设该周从星期日开始。如果您的星期从星期一开始,您将不得不稍微修改代码。

于 2009-04-02T19:03:54.640 回答
1

我将创建一个工厂方法,该方法将返回一个接口(或您可以执行的委托),该接口将传递当前日期并根据实现为您返回日期范围。

当然,您从工厂方法返回的实现将取决于您传递给它的枚举值,该值对应于“今年”、“去年”等。

于 2009-04-02T19:00:15.337 回答
0

我将使用 DateTime 内置方法添加和返回日期的特定部分,以编写一个返回间隔的函数。

于 2009-04-02T19:10:18.167 回答