JDE ユリウス日とグレゴリオ暦の間で相互に変換する VBA コードのサンプル:
Public Const Epoch = 1900
Public Const JDateMultiplier = 1000
Public Const FirstJan = "01/01/"
Public Function Julian2Date(ByVal vDate As Long) As Date
Dim Year As Long
Dim Days As Long
Dim SeedDate As Date
' Day Number
Days = vDate - (Int(vDate / JDateMultiplier) * JDateMultiplier) - 1
' Calendar Year
Year = ((vDate - Days) / JDateMultiplier) + Epoch
' First Day of Calendar Year
SeedDate = CDate(FirstJan + CStr(Year))
' Add Number of Days to First Day in Calendar Year
Julian2Date = DateAdd("d", Days, SeedDate)
End Function
Public Function Date2Julian(ByVal vDate As Date) As Long
Dim JYear As String
Dim BeginDate As Date
Dim JDays As Long
' Calendar Year
JYear = Format(Year(vDate), "0000")
' First Day of Calendar Year
BeginDate = CDate(FirstJan + JYear)
' Day Number
JDays = DateDiff("d", BeginDate, vDate) + 1
' Add Number of Days to Year Number
Date2Julian = ((CLng(JYear) - Epoch) * JDateMultiplier) + JDays
End Function
できるだけ明確かつ単純にするように努めましたが、この目的のために意図的にエラー トラップを省略しました。ただし、コードを VBA モジュールに追加して、独自のコードから直接呼び出すことができるはずです。
T-SQL の便利なスニペットもいくつか含めます。
JDE ユリウス日としての今日の日付:
(datepart(yy,getdate())-1900) * 1000 + datepart(dy, getdate())
JDE ユリウス日をグレゴリオ暦 (DD/MM/YYYY) に変換し、XXXXXX を JDE ユリウス日を含む列名に置き換えます。
convert (varchar, dateadd (day,convert (int, right(XXXXXX,3)) - 1, convert (datetime, ('1/1/' + convert ( varchar, (cast(left(right(XXXXXX+1000000,6),3) as varchar) + 1900))))),103)
別のグレゴリオ形式が必要な場合は、103 の値 (末尾の右側) を、https ://msdn.microsoft.com/en-us/library/ms187928.aspx にある適切な値に置き換えます。