AddDays()不增加月份

时间:2019-07-13 10:08:35

标签: .net datetime

在我的代码中,AddDays(1)在一个月中的除一天中的最后一天以外的所有时间正常工作。

我有一个数据表,其中包含从csv读取的数据。每行包含一个日期,其日期为字符串,格式为yyyy-mm-dd。我想在此日期添加一天。 下面的代码适用于日期不是月份的最后一天的所有日期,但是不能增加月份。

示例:

2019-07-30正确地增加到2019-07-31,但是2019-07-31地增加到2019-07-01而不是2019-08-01

我尝试过Date.Parse,并尝试使用System.Globalization.CultureInfo.InvariantCultureSystem.Globalization.DateTimeFormatInfo.InvariantInfo失败了。

MS文档说

  

执行日期算术时,AddDays方法会考虑leap年和一个月中的天数。

我在做什么错了?

Dim enUK As New System.Globalization.CultureInfo("en-UK")
For Each row As DataRow In Outs.Select
   Dim Lastdate As Date = DateTime.ParseExact(row("EndDate"), "yyyy-mm-dd", enUK) 
   Dim DepDate As Date = Lastdate.AddDays(1)
   row("Date") = DepDate.ToString("yyyy-mm-dd")
Next

对于row("Date")的{​​{1}}值,我期望2019-08-01的值是row("EndDate"),而不是2019-07-31的值。

1 个答案:

答案 0 :(得分:4)

您在格式字符串中使用mm,这表示分钟,而不是。因此,您没有正确解析开始的日期。您想要类似的东西:

Dim enUK As New System.Globalization.CultureInfo("en-UK")
For Each row As DataRow In Outs.Select
   Dim Lastdate As Date = DateTime.ParseExact(row("EndDate"), "yyyy-MM-dd", enUK) 
   Dim DepDate As Date = Lastdate.AddDays(1)
   row("Date") = DepDate.ToString("yyyy-MM-dd", enUK)
Next

请注意,我还向enUK添加了ToString参数-否则,如果您当前的线程区域性使用其他日历系统,则可能会得到一些非常奇怪的结果。