日期时间添加年份() 数组未按预期工作
本文关键字:工作 数组 添加 时间 日期 | 更新日期: 2023-09-27 18:36:10
我对日期有问题。我无法让.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);
}
-
initial_date.AddYears(1);
重复将 1 加到相同的值,因此初始值之后的所有 DateTimes 都具有相同的值。 DateTime 是不可变的,因此对其方法的调用不会更改其值,而是返回具有所需值的新实例。 您需要将其更改为initial_date.AddYears(i);
- 如果您希望年份范围为 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);
}
它将为您提供所需的结果。
正如 Mark M 指出的,你的问题可能在于你通过 for 循环中的 AddYears
方法添加1
,而不是i
。
下面是 LINQ 中更正的代码:
DateTime[] dates = Enumerable.Range(0, 20).Select(initial_date.AddYears).ToArray();
我会稍微简化代码,正如 Mark M 在他的评论中所说,将 AddYears
中的1
替换为 i
DateTime[] dates = new DateTime[20];
for (int i = 0; i < 20; i++) {
dates[i] = initial_date.AddYears(i);
}
如果您打算设置一个具有不同年份的数组,那么您将需要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 PM
2024/6/2 12:01:48 PM
2025/6/2 12:01:48
2026/6/2 12:01:48 PM
2027/6/2 12:01:48 PM
2028/6/2 12:01:48 PM
2029/6/2 12:01:48
2030/6/2 12:01:48
2031/6/2 12:01:48 PM