vb.net - 在 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
我知道格式与错误有关,因为我在没有它的情况下测试了程序并且它工作得很好。但是格式是必要的,如果它是导致每个项目最终出现错误的主要原因,而不仅仅是其中一些。我自己当然想出了一些解决方法,但我想知道为什么错误不是确定的并且有时会出现,而且由于这是我在这里的第一个问题,我还不知道很多规则,所以我为任何不合适的地方道歉或缺乏适当的信息。如果我遗漏了什么,请告诉我,我会更新信息。
解决方案
为什么“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
推荐阅读
- java - Hibernate Envers 声称 EntityManager 已关闭
- flutter - flutter video_player(或chewie)在youtube等横向模式下进入全屏
- python - 在 Django 中查询多对多关系
- c# - Unity - 关于如何在场景中像变换轴一样移动相机的想法
- docker - Docker 运行找不到 shell 脚本
- jenkins - 将文件复制到管道詹金斯中的远程窗口服务器
- javascript - 如果输入背景颜色为空,则更改输入背景颜色
- c++ - sqlite上的读写锁
- amazon-s3 - 用于个人资料图片的 AWS S3
- python - RuntimeWarning:在 arccos 中遇到无效值,但值在限制范围内