在VB.NET中使用datediff时发生转换错误

问题描述 投票:1回答:1

所以基本上,我遇到这个错误:Error image link

通常,我会接受我的代码是错误的并进行修复,但实际上,它似乎在大多数时间都有效。而且我找不到个案之间的区别。为什么''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

我知道格式与错误有关,因为我在不使用该程序的情况下对其进行了测试,因此效果很好。但是格式是必需的,并且如果它是导致every项最终出错的主要原因,而不仅仅是其中一些。我当然想出了一些解决方法,但是我想知道为什么该错误不是确定的,有时会出现,并且由于这是我的第一个问题,所以我不了解很多规则,因此对于任何不适当的内容,我深表歉意。缺乏适当的信息。如果我缺少什么,请告诉我,我会更新信息。

vb.net datagridview datediff
1个回答
0
投票

为什么'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
© www.soinside.com 2019 - 2024. All rights reserved.