0

従業員が1か月で取った葉を見つけたいです。コードはすべての日付で完全に機能します。さて、1月に従業員が取った葉を見つけたい場合、範囲は次のとおりです。

DateTime first = Convert.ToDateTime(DateTime.Now.Month + "01" + DateTime.Now.Year);
DateTime end = Convert.ToDateTime(DateTime.Now.Month + "31" + DateTime.Now.Year);

問題は、一部の月には31日がないことです。変数FromとToを範囲に割り当てる簡単な方法はありますか?月の2月または4月は、31日がないため、エラーが発生します。

検索を実行するためのコードは次のとおりです。

returnedRows = LeaveDS.Tables["Leave"].Select("LeaveDate >= #" + first + "# AND LeaveDate <= #" + end + "#");
4

7 に答える 7

6

次のようなことができます。

DateTime end = first.AddMonths(1).AddDays(-1);
于 2013-01-25T16:17:05.360 に答える
3
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)

1 か月の日数が表示されます。

于 2013-01-25T16:18:04.950 に答える
2

使用するDateTime.DaysInMonth(int year, int month)

        int days = DateTime.DaysInMonth(2012, 2);
        int days2 = DateTime.DaysInMonth(2011, 2);

出力:

 days = 29
 days2 = 28
于 2013-01-25T16:18:56.037 に答える
2

で月の日数を取得し、DateTime.DaysInMonth(year,month)これをクエリの基礎として使用できます。

別の方法として、各月の最初の日を使用して、選択クエリを終了日よりも前になるように変更します。

DateTime first = Convert.ToDateTime(DateTime.Now.Month + "01" + DateTime.Now.Year);
DateTime end = first.AddMonths(1); // Becomes 01 of next month

returnedRows = LeaveDS.Tables["Leave"].Select("LeaveDate >= #" + first + "# AND LeaveDate < #" + end + "#");
于 2013-01-25T16:20:05.070 に答える
1

1か月の日数を取得するための優れた方法があり、 DateTime.DaysInMonthと呼ばれます。

DateTime end = new DateTime(first.Year, first.Month, DateTime.DaysInMonth(first.Year, first.Month);
于 2013-01-25T16:19:17.883 に答える
0
var enddate = DateTime.Now.AddMonths(1);
DateTime end = new DateTime(enddate.Year,enddate.Month,1);
于 2013-01-25T16:17:55.813 に答える
0

ちなみに、.NET 3.5 以降を使用している場合は、Linq-To-DataSet を使用するとコードが簡素化および改善されます。

int month = 2; // f.e. for february
var currentCalendar = System.Globalization.CultureInfo.CurrentCulture.Calendar;
int daysInMonth = currentCalendar.GetDaysInMonth(month);
DateTime start = new DateTime(DateTime.Now.Year, month, 1);
DateTime end = new DateTime(DateTime.Now.Year, month, daysInMonth);
var filteredRows = LeaveDS.Tables["Leave"].AsEnumerable()
    .Where(r => r.Field<DateTime>("LeaveDate").Date >= start
             && r.Field<DateTime>("LeaveDate").Date <= end );
// use ToArray for an array, CopyToDataTable for a DataTable etc.
于 2013-01-25T16:27:05.313 に答える