在 VB.NET 中使用 datediff 时发生转换错误
Conversion error while using datediff in VB.NET
基本上,我遇到了这个错误:
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
我知道格式与错误有关,因为我在没有它的情况下测试了程序并且它运行正常。但是格式是必要的,如果它是导致 每个 项目最终都出现错误的主要原因,而不仅仅是其中一些。
当然,我自己想出了一些解决方法,但我想知道为什么错误不是确定的并且有时会出现,而且由于这是我在这里的第一个问题,我还不知道很多规则,所以对于任何不合适的地方我深表歉意或缺乏适当的信息。如果我遗漏了什么,请告诉我,我会更新信息。
Why is '04-09-2018' working fine as a date but '17-08-2019' is being
taken as a String?
因为当前线程文化的日期格式是 运行 as "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
基本上,我遇到了这个错误: 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
我知道格式与错误有关,因为我在没有它的情况下测试了程序并且它运行正常。但是格式是必要的,如果它是导致 每个 项目最终都出现错误的主要原因,而不仅仅是其中一些。 当然,我自己想出了一些解决方法,但我想知道为什么错误不是确定的并且有时会出现,而且由于这是我在这里的第一个问题,我还不知道很多规则,所以对于任何不合适的地方我深表歉意或缺乏适当的信息。如果我遗漏了什么,请告诉我,我会更新信息。
Why is '04-09-2018' working fine as a date but '17-08-2019' is being taken as a String?
因为当前线程文化的日期格式是 运行 as "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