VB.net 检查日期(年份)是否是一个奇怪的年份

VB.net checking date (year) to see if its an weird year

我正在遍历 LDAP 数据,将其中的一些数据放入 MS SQL 数据库中。在 7k+ LDAP 记录中,有一些在尝试将 lastlogin 放入具有 DateTime 格式的数据库时导致了问题。

问题是日期,12/31/1600 7:00:00 PM,不正确并导致错误

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。 声明已终止。

在将日期格式插入数据库之前,我一直在检查日期格式。

 If Not IsDate(empInfo.lastLogon) Then
    empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:MM:ss")
 End If

但似乎没有捕捉到 1600 的年份,这似乎是导致上述错误的原因。

是否有任何代码可以用来检测那些奇怪的年份并将其替换为随机的合法日期,以便将其放入数据库?

几个月使用 MM,但分钟使用 mm

即;你应该使用 MM/dd/yyyy HH:mm:ss 而不是 MM/dd/yyyy HH:MM:ss.

希望对你有所帮助

我想你想要这样的东西:

 If Not IsDate(empInfo.lastLogon) OrElse DateTime.Parse(empInfo.lastLogon).Year < 2000 Then
    empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:mm:ss")
 End If

我认为你的问题是因为代码中的有效日期在数据库中不是有效日期,可能是因为数据库可以存储最早的日期 1753,而代码允许更早的日期(比如你引用的 1600)。

尝试在您的 IF 语句中添加年份测试:

If Not IsDate(empInfo.lastLogon) OrElse empInfo.lastLogon.year < 2000 Then
    empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:MM:ss")
End If

您可能想要使用 01/01/2000 00:00:00 这样的标记值,而不是使用 1 年前的默认值。这将使您轻松识别没有 "real" 值的那些。但我不知道你的业务规则,所以 YMMV。