'JDE日期格式轉換成標準日期
'2005.4.4
'seanPublic Function jd(JulianDate)
Dim YearNO As Integer, DaysNo As Integer, DaysInYear As Integer
YearNO = Left(JulianDate, Len(JulianDate) - 3) + 1900
DaysNo = Right(JulianDate, 3)If YearNO Mod 4 = 0 Then
DaysInYear = 366
Else
DaysInYear = 365
End IfIf DaysNo <= DaysInYear And DaysNo >= 1 Then
jd = DateSerial(YearNO, 1, 1) + DaysNo - 1
Else: jd = "Invalid Julian Date"
End IfEnd Function
'把報表日期格式轉換成JDE日期格式
Public Function jdeDate(strDate)
If IsDate(strDate) = False Then
    MsgBox "無效日期"
    Exit Function
End If
jdeDate = CLng(CStr(CLng(Year(CVDate(strDate)) - 1900)) + Format(CStr(CVDate(strDate) - DateSerial(Year(CVDate(strDate)), 1, 1) + 1), "000"))
End Function
這是在寫在mdlSubFun中2段,我不是很明白2種日期之間的轉換,請指教下!

解决方案 »

  1.   

    Julian日期格式是yyDDD,知道这一点,上面的代码就很好理解了。Public Function jd(JulianDate) 
    Dim YearNO As Integer, DaysNo As Integer, DaysInYear As Integer 
    YearNO = Left(JulianDate, Len(JulianDate) - 3) + 1900'取出年份号,是Julian日期的前两位,表示为“19yy年”。估计会有千年虫的问题。 
    DaysNo = Right(JulianDate, 3) '取出后面的三位DDD,是一年中第几天 If YearNO Mod 4 = 0 Then  '计算是否闰年,以确定该年份年天数
    DaysInYear = 366 
    Else 
    DaysInYear = 365 
    End If If DaysNo <= DaysInYear And DaysNo >= 1 Then  '根据该年的天数,判断julian日期中天数是否有效
    jd = DateSerial(YearNO, 1, 1) + DaysNo - 1 
    Else: jd = "Invalid Julian Date" 
    End If End Function 
    '把報表日期格式轉換成JDE日期格式
    '是上面过程的逆转换 
    Public Function jdeDate(strDate) 
    If IsDate(strDate) = False Then 
        MsgBox "無效日期" 
        Exit Function 
    End If 
    jdeDate = CLng(CStr(CLng(Year(CVDate(strDate)) - 1900)) + Format(CStr(CVDate(strDate) - DateSerial(Year(CVDate(strDate)), 1, 1) + 1), "000")) 
    End Function 
      

  2.   

    If DaysNo <= DaysInYear And DaysNo >= 1 Then  '
    jd = DateSerial(YearNO, 1, 1) + DaysNo - 1 
    '如果jd是date型,将返回yyyy-mm-dd的日期形式,如果是long,会返回距离1900年1月1日间隔的天数
    Else: jd = "Invalid Julian Date" 
    End If