2011-04-27 81 views
3

我需要將YYDDD格式的DateTime轉換爲Julian日期。 你怎麼做到的? 我已經看到在.net中有一個JulianCalendar類,但找不到任何示例如何執行轉換。 我看過幾個鏈接,但都沒有工作。如何將DateTime轉換爲JulianDate?

有什麼建議嗎?

更新 我已經給了一些日期轉換爲CSV文件,這包括將日期時間轉換爲我無法明顯改變的格式在銀行界使用。格式是YYDDD。一些谷歌搜索後,它看起來像是朱利安日曆。我可能是錯的。所以在這裏我完全混淆了什麼格式。

+0

這不是我熟悉的朱利安日期的定義。 (也就是從公元前4000年開始的天數)。另外,不要忘記,朱利安日期*從中午開始,而不是午夜*。你確定你正在使用Julian日期嗎?爲什麼在我們花費數十億美元解決一個Y2K問題之後,爲什麼你會使用兩位數年份?從過去的錯誤中學習。 – 2011-04-27 14:12:17

+0

您是否想要Julius Cesar日曆或天文學家使用的Julian日期(即自BC 1月1日4713年格林威治中午之後)的日期? – 2011-04-27 14:20:42

+0

在20世紀90年代中期我曾經工作過的一個地方,人們使用「Julian date」一詞來表示「一年中的某一天」。我認爲這是令人困惑,非標準和不必要的術語,但他們理所當然地認爲人們會知道他們在說什麼。當然,我刪除了我觸及的所有文檔中的術語。 YYDDD格式的日期將是「Julian日期」的*第三個*意思! – 2011-04-27 14:23:57

回答

9

它看起來像這樣的格式確實稱爲儒略日在大型機領域...

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=julian+date+yyddd

var myDate = DateTime.Now; 
string.Format("{0:yy}{1:D3}", myDate, myDate.DayOfYear); 

編輯 - 這樣的字符串轉換回一個日期,一個能使用這樣的事情:

DateTime FromBizarreMainframeFormat(string julianDate) { 
    // TODO add validation logic, plus rules to cope with pre-2000 dates 
    var yy = 2000 + int.Parse(julianDate.SubString(0,2)); 
    var ddd = int.Parse(julianDate.Substring(2)); 
    return new DateTime(yy, 1, 1).AddDays(ddd); 
} 
+0

感謝,按預期工作。它將工作在不同的文化? – user712923 2011-04-27 15:06:10

+0

是的,它應該... – jeroenh 2011-04-27 15:10:21

+0

對不起,要求另一個。怎麼把它轉換回來。 – user712923 2011-04-27 16:15:15

2

它看起來像你要求的值等於(myDate.Year % 100) * 1000 + myDate.DayOfYear。這是一個非常簡單的計算。

如果你想要一個前導零的字符串,那麼你可以做(myDate.Year % 100).ToString("D2") + myDate.DayOfYear.ToString("D3")