在我的代码中,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.InvariantCulture
或System.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
的值。
答案 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
参数-否则,如果您当前的线程区域性使用其他日历系统,则可能会得到一些非常奇怪的结果。