6

「2009 年 6 月の第 2 火曜日」や「2009 年 7 月の最後の金曜日」などの標準的なスケジュール情報が与えられた場合、それを日付に変換するための最も単純で効率的な式は何ですか?

入力:

  • w= 月の週、列挙 (1st、2nd、3rd、4th または Last)
  • d= 曜日、enum Sun から Sat
  • m= 月、整数
  • y= 年、整数

編集 (再度) - 週の開始日は関係ありません。指定された月にdのw番目のインスタンスを取得したい。したがって、2009 年 6 月の第 2 日曜日は、技術的には 6 月の第 3 週になりますが、6 月 14 日です。同様に、6 月の第 1 日曜日は 6 月 7 日であり、null/例外ではありません。

4

3 に答える 3

8

何かのようなもの:

static DateTime GetDate(int year, int month, DayOfWeek dayOfWeek,
        int weekOfMonth) {
    // TODO: some range checking (>0, for example)
    DateTime day = new DateTime(year, month, 1);
    while (day.DayOfWeek != dayOfWeek) day = day.AddDays(1);
    if (weekOfMonth > 0) {
        return day.AddDays(7 * (weekOfMonth - 1));
    } else { // treat as last
        DateTime last = day;
        while ((day = day.AddDays(7)).Month == last.Month) {
            last = day;
        }
        return last;
    }
}
于 2009-06-02T13:17:20.960 に答える
0
using System;

namespace date_using_week_of_month
{

    public class Example
    {
        public static DateTime WthDayDOfMonthM( int w, DayOfWeek d, DateTime month )
        {
            return first( d, month ).AddDays( 7 * (w - 1) );
        }

        private static DateTime first( DayOfWeek d, DateTime month )
        {
            DateTime first = new DateTime(
                month.Year, month.Month, 1 );
            while ( first.DayOfWeek != d )
            {
                first = first.AddDays( 1 );
            }
            return first;
        }
    }
}
于 2009-06-05T16:04:16.550 に答える