首页 > 解决方案 > 在 VB.NET 中使用 datediff 时出现转换错误

问题描述

所以基本上,我遇到了这个错误: 错误图片链接

通常我会接受我的代码错误并修复它,但问题是它似乎大部分时间都在工作。而且我找不到案例之间的区别。为什么“04-09-2018”作为日期可以正常工作,但“17-08-2019”被视为字符串?

此代码从 datagridview 中的单元格获取日期,其中使用数据库中的格式临时存储日期:

Private Sub wrty_show()
    Dim dt As Date : Dim difd As String
    dt = DataGridView1.CurrentRow.Cells(3).Value
    difd = DateDiff("d", dt, Today)
    If (difd >= 365) Then : Label11.Text = "Invalid" : Label11.ForeColor = System.Drawing.Color.Red
    ElseIf (difd < 365) Then : Label11.Text = "Valid" : Label11.ForeColor = System.Drawing.Color.Green
    End If
End Sub

这是我用来将数据库中的日期检索到 datagridview 单元格中的查询的一部分,并显示特殊格式(不知何故,我知道这会将日期转换为字符串,但我不是 100% 确定,因为我没有太多处理日期的经验):

DATE_FORMAT(w.wrty_date , '%d-%m-%Y') AS wrty_date

我知道格式与错误有关,因为我在没有它的情况下测试了程序并且它工作得很好。但是格式是必要的,如果它是导致每个项目最终出现错误的主要原因,而不仅仅是其中一些。我自己当然想出了一些解决方法,但我想知道为什么错误不是确定的并且有时会出现,而且由于这是我在这里的第一个问题,我还不知道很多规则,所以我为任何不合适的地方道歉或缺乏适当的信息。如果我遗漏了什么,请告诉我,我会更新信息。

标签: vb.netdatagridviewdatediff

解决方案


为什么“04-09-2018”作为日期可以正常工作,但“17-08-2019”被视为字符串?

因为当前线程文化的日期格式运行为“mm-dd-yyyy”,所以当您尝试分配“04-09-2018”时,系统能够在 2018 年 4 月 9 日对其进行转换,但是当您尝试分配“ 17-08-2019" 系统无法将其转换为最新版本。

试试下面的代码

   Private Sub wrty_show()
      Dim dt As Date : Dim difd As String
      dt = DateTime.ParseExact(DataGridView1.CurrentRow.Cells(3).Value, "dd-MM-yyyy", CultureInfo.InvariantCulture) 
      difd = DateDiff("d", dt, Today)
      If (difd >= 365) Then : Label11.Text = "Invalid" : Label11.ForeColor = 
         System.Drawing.Color.Red
      ElseIf (difd < 365) Then : Label11.Text = "Valid" : Label11.ForeColor = 
         System.Drawing.Color.Green
      End If
   End Sub

推荐阅读