0

日付に問題があります。.AddYears()メソッドが機能しません。誰かが私がここで間違っていることを見てください。

MySqlConnection myMySqlConnection = new MySqlConnection(connectionString);
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd1;
cmd1 = new MySqlCommand("SELECT INITIAL_DATE FROM USERS WHERE ID = @id1", myMySqlConnection);
cmd1.Parameters.AddWithValue("@id1", id);
myMySqlConnection.Open();
da.SelectCommand = cmd1;
DateTime initial_date = (DateTime)cmd1.ExecuteScalar();
myMySqlConnection.Close();

この時点から、以下が問題です。

DateTime[] dates = new DateTime[20];
dates[0] = Convert.ToDateTime(initial_date);

for (int i = 1; i < 20; i++)
{
     dates[i] = initial_date.AddYears(1);
}
4

4 に答える 4

1
  1. initial_date.AddYears(1);同じ値に1を繰り返し加算していたため、最初の日付以降のすべてのDateTimeは同じ値でした。DateTimeは不変であるため、そのメソッドを呼び出してもその値は変更されませんが、目的の値を持つ新しいインスタンスが返されます。次のように変更する必要がありますinitial_date.AddYears(i);
  2. 年の範囲を2012-2032にしたい場合は、実際には20ではなく21の値が必要です。したがって、それに応じて配列の長さとforループの状態を調整する必要があります。

問題コードを次のように変更します。

DateTime[] dates = new DateTime[21];
dates[0] = Convert.ToDateTime(initial_date);

for (int i = 1; i <= 20; i++)
{
     dates[i] = initial_date.AddYears(i);
}

それはあなたが必要とする結果をあなたに与えるでしょう。

于 2012-06-02T16:08:31.033 に答える
1

マーク M が指摘したように、問題はおそらくfor ループ内のメソッドを介して1ではなくを追加することにあります。iAddYears

LINQ で修正されたコードは次のとおりです。

DateTime[] dates = Enumerable.Range(0, 20).Select(initial_date.AddYears).ToArray();
于 2012-06-02T16:03:20.153 に答える
0

年が異なるアレイを設定することが目的の場合は、AddYears(i)1年だけを追加するのではなく、

DateTime initial_date = DateTime.Now;
DateTime[] dates = new DateTime[20];
dates[0] = Convert.ToDateTime(initial_date);

for (int i = 1; i < 20; i++)
{
    dates[i] = initial_date.AddYears(i);
    Console.WriteLine(dates[i]);
}

印刷されます:

2013年6月2日12:01:48PM

2014年6月2日12:01:48PM

2015年6月2日12:01:48PM

2016年6月2日12:01:48PM

2017年6月2日12:01:48PM

2018年6月2日12:01:48PM

2019年6月2日12:01:48PM

6/2/2020 12:01:48 PM

6/2/2021 12:01:48 PM

6/2/2022 12:01:48 PM

2023年6月2日12:01:48PM

6/2/2024 12:01:48 PM

2025年6月2日12:01:48PM

6/2/2026 12:01:48 PM

2027年6月2日12:01:48PM

6/2/2028 12:01:48 PM

2029年6月2日12:01:48PM

6/2/2030 12:01:48 PM

6/2/2031 12:01:48 PM

于 2012-06-02T16:05:57.550 に答える
0

コードを少し単純化し、Mark M がコメントで述べているように、1inAddYearsi

DateTime[] dates = new DateTime[20];
for (int i = 0; i < 20; i++) {
    dates[i] = initial_date.AddYears(i);
}
于 2012-06-02T16:03:00.413 に答える