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

正如 Mark M 指出的那样,您的问题可能在于通过for 循环中的方法添加1,而不是。iAddYears

这是 LINQ 中更正后的代码:

DateTime[] dates = Enumerable.Range(0, 20).Select(initial_date.AddYears).ToArray();
于 2012-06-02T16:03:20.153 回答
1
  1. initial_date.AddYears(1);重复地将 1 添加到相同的值,因此在初始值之后的所有 DateTimes 都具有相同的值。DateTime 是不可变的,因此对其方法的调用不会更改其值,而是返回具有所需值的新实例。您需要将其更改为initial_date.AddYears(i);
  2. 如果您希望年份范围为 2012 - 2032,您实际上需要 21 个值,而不是 20 - 因此您需要相应地调整数组长度和 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 回答
0

我会稍微简化代码,正如 Mark M 在他的评论中所说,将1in替换AddYearsi

DateTime[] dates = new DateTime[20];
for (int i = 0; i < 20; i++) {
    dates[i] = initial_date.AddYears(i);
}
于 2012-06-02T16:03:00.413 回答
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:48

2014 年 6 月 2 日下午 12:01:48

2015 年 6 月 2 日下午 12:01:48

2016 年 6 月 2 日下午 12:01:48

2017 年 6 月 2 日下午 12:01:48

2018 年 6 月 2 日下午 12:01:48

2019 年 6 月 2 日下午 12:01:48

2020 年 6 月 2 日下午 12:01:48

2021 年 6 月 2 日下午 12:01:48

2022 年 6 月 2 日下午 12:01:48

2023 年 6 月 2 日下午 12:01:48

2024 年 6 月 2 日下午 12:01:48

2025 年 6 月 2 日下午 12:01:48

2026 年 6 月 2 日下午 12:01:48

2027 年 6 月 2 日下午 12:01:48

2028 年 6 月 2 日下午 12:01:48

2029 年 6 月 2 日下午 12:01:48

2030 年 6 月 2 日下午 12:01:48

2031 年 6 月 2 日下午 12:01:48

于 2012-06-02T16:05:57.550 回答