1
我試圖將excel vba中的朱利安日期(yy/ddd)轉換爲regualr mm/dd/yy數據。我有一個使用select case語句的想法,每個月都會調用一個函數。但是,這是很多代碼,我很懶。我想知道是否有更好的方法?朱利安日期至Excel中的mm/dd/yy
我試圖將excel vba中的朱利安日期(yy/ddd)轉換爲regualr mm/dd/yy數據。我有一個使用select case語句的想法,每個月都會調用一個函數。但是,這是很多代碼,我很懶。我想知道是否有更好的方法?朱利安日期至Excel中的mm/dd/yy
根據this website:
=DATE(IF(0+(LEFT(A1,2))<30,2000,1900)+LEFT(A1,2),1,RIGHT(A1,3))
只要你有A1一個五位數字,因爲它它的工作原理。例如,它將95032變成2/1/1995。如果您的數據實際上有斜線(95/032),則需要調整公式。
同一個網站也有一個vba部分。它說,下面的工作:
Function JDateToDate(JDate As String) As Long
Dim TheYear As Integer
Dim TheDay As Integer
Dim TheDate As Long
TheYear = CInt(Left(JDate, 2))
If TheYear < 30 Then
TheYear = TheYear + 2000
Else
TheYear = TheYear + 1900
End If
TheDay = CInt(Right(JDate, 3))
TheDate = DateSerial(TheYear, 1, TheDay)
JDateToDate = TheDate
End Function
我沒有測試VBA代碼,但由於它基本上是上述公式的代碼版本,它應該做的工作。
編輯:正如tbischel指出,這實際上不是Julian日期。這是一個Ordinal Date。
這不是一個Julian日期,也不是一個修改後的Julian日期......在您的測試用例中該範圍不正確。對於最近的事情,JD應該> 2400000。修改後的朱利安日期從結果中減去2400000,但對於20世紀90年代的任何事情,這個數字應該在50000左右。 http://www.csgnetwork.com/julianmodifdateconv.html – tbischel 2009-12-23 00:29:01
我不知道你爲什麼要評論我的答案,而不是原來的問題。 OP使用「Julian Date」而不是「Ordinal date」,這是真的,但我沒有說它是Julian日期。 – Bill 2009-12-23 15:28:02