Foxpro返回的日期类型指示不存在的日期

问题描述

如果在命令框中运行以下功能,则在应返回[U]时将返回[D]。因为1964年4月31日不是一个有效日期。这是因为1964年是a年吗?这是错误吗?

?类型('DATE(Val(Substr([19640430],1,4)),Val(Substr([19640430],5,2)),Val(Substr([19640430],7,2))+ 1)' )

关于此的任何信息将非常有帮助。

谢谢 杰夫

解决方法

这是因为,即使它为空,Date数据类型也将返回D。在您的情况下,它返回空,因为Date(1964,4,31)不是有效的日期。我不知道它是否可以记录,在Date()函数中,检查第二个参数是否在1-12范围内,并且检查第三个参数在1-31中。就是这样,除此之外,不存在的日期不会导致错误,而只是返回一个空日期,但仍然是DATE。

您可以尝试:

? Date(2000,2,29)
? Date(2001,29)
* or even
? Date(2020,31)

最后两个不会出错,但返回空的“ DATE”。

如果要对日期的有效性进行类型检查,那么最好检查一下是否为空。

,
Procedure VDATE
    Lparameters v1,v2,v3

    v1 = Str(v1,4,0)

    v2 = str2(v2)

    If Len(v2) < 2
        v2 = [0] + v2
    Endif

    v3 = str2(v3)

    If Len(v3) < 2
        v3 = [0] + v3
    Endif

    Do Case
        Case Empty(Ctod(v2 + [/] + v3 + [/] + v1))
            Return .F.
        Case Ctod(v2 + [/] + v3 + [/] + v1) > Date()
            Return .F.
        Case Ctod(v2 + [/] + v3 + [/] + v1) < Ctod([01/01/1000])
            Return .F.
        Otherwise
            Return .T.
    Endcase