2009-11-12 63 views
1

我試圖將excel vba中的朱利安日期(yy/ddd)轉換爲regualr mm/dd/yy數據。我有一個使用select case語句的想法,每個月都會調用一個函數。但是,這是很多代碼,我很懶。我想知道是否有更好的方法?朱利安日期至Excel中的mm/dd/yy

回答

1

根據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

+0

這不是一個Julian日期,也不是一個修改後的Julian日期......在您的測試用例中該範圍不正確。對於最近的事情,JD應該> 2400000。修改後的朱利安日期從結果中減去2400000,但對於20世紀90年代的任何事情,這個數字應該在50000左右。 http://www.csgnetwork.com/julianmodifdateconv.html – tbischel 2009-12-23 00:29:01

+0

我不知道你爲什麼要評論我的答案,而不是原來的問題。 OP使用「Julian Date」而不是「Ordinal date」,這是真的,但我沒有說它是Julian日期。 – Bill 2009-12-23 15:28:02

相關問題