9

私はこれを行う必要がある最初の人ではないと確信しているので、私は最善の方法を探しています。

次のような選択肢のあるラジオボタンのセットがあります

  • この年
  • 去年
  • 今月
  • 先月
  • 今週
  • 先週

そして、現在の日付から適切な相対的な日付範囲を生成する必要があります(DateTime.Now)。

たとえば、Last Yearが選択され、現在の日付がの場合、の開始日と終了日4/2/09 14:45:32を返す必要があります。1/1/08 00:00:0012/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 に答える