0

CDate次のコードで、関数の動作がおかしいことがわかりました。

private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + Application.StartupPath + @"\db.mdb" + ";Persist Security Info=False");
            {
                OleDbDataAdapter adapterA = new OleDbDataAdapter("SELECT CDate(#01/05/2013#) AS TheDate", connection);
                DataTable dataTableA = new DataTable();
                adapterA.Fill(dataTableA);
                DateTime dateTimeA = (DateTime)dataTableA.Rows[0]["TheDate"]; // get 1
                MessageBox.Show(dateTimeA.Month.ToString());
            } //these to ensure that I did not use the variables in the next block /^-^\ .


            {
                OleDbDataAdapter adapterB = new OleDbDataAdapter("SELECT CDate(#13/05/2013#) AS TheDate", connection);
                DataTable dataTableB = new DataTable();
                adapterB.Fill(dataTableB);
                DateTime dateTimeB = (DateTime)dataTableB.Rows[0]["TheDate"]; // get 5
                MessageBox.Show(dateTimeB.Month.ToString());
            }


        }

値が 12 より大きい場合、CDate関数はそれを日付の「日」の部分と見なし、他の部分は日付の「月」の部分と見なすことを理解しています。

ソースコードは (リンク)からダウンロードできます。

そのためのルールは何ですか?

Microsoft が MSDN でこれを説明しなかったのはなぜですか?

4

1 に答える 1

0

はい、あなたは正しいです。CDate は、12 より大きい月の値を日の値として処理しようとします。

これを試してみてください。

private bool IsDate(String inputDate)
{
  DateTime dt;


  Return DateTime.TryParse(inputDate,out dt);

}
于 2013-01-16T17:18:02.953 に答える