2012-05-17 35 views
5

*(這是ISV數據庫,所以我有點逆向工程這一點,並不能改變)...CLARION日期轉換C#+日期加/減

我怎樣才能做到以下日期爲int(簽證/反之亦然)的轉換在C#...

這麼說的日期是:

5/17/2012 

它被轉換成int

77207 

在數據庫中。

起初我以爲這是一個儒略日期,但它似乎並非如此。我是從Julian Date Question的方法鬼混,但是這不匹配。

var date = ConvertToJulian(Convert.ToDateTime("5/17/2012")); 
    Console.WriteLine(date); 

    public static long ConvertToJulian(DateTime Date) 
    { 
     int Month = Date.Month; 
     int Day = Date.Day; 
     int Year = Date.Year; 

     if (Month < 3) 
     { 
      Month = Month + 12; 
      Year = Year - 1; 
     } 
     long JulianDay = Day + (153 * Month - 457) 
     /5 + 365 * Year + (Year/4) - 
     (Year/100) + (Year/400) + 1721119; 
     return JulianDay; 
    } 

Outputs 2456055 //Should be 77207 

我一直在使用這個SQL做轉換:

SELECT Convert(date, CONVERT(CHAR,DATEADD(D, 77207, '1800-12-28'),101)) 

,它似乎是準確的。我怎麼能在C#中進行這種轉換?有人可以讓我認識到這是基於什麼標準,或者它只是一個隨機轉換。提前致謝。

+0

您是否嘗試過,看看是否5/18/2012產生77208或者2012/5/16生成77206? – Josh

+0

@Josh是的,這是我怎麼想出了一點的SQL ... 5/18 = 77208等... –

+0

重命名爲未來人們遇到這個問題 –

回答

5

這似乎是一個Clarion Date

自12月28日已經過去的天數,1800

據稱於Display Clarion Dates In Excel只需

減去36161從數值和格式上作爲日期

+0

好的呼叫喬希,Great Links也 –

0

如果它是一個線性公式,您應該能夠以y = mx + b的形式計算公式。您至少需要兩個數據點。

4
//TO int 
var date = new DateTime(1800,12,28,0,0,0);    
var daysSince = (DateTime.Now-date).Days; 

//FROM int 
var date = new DateTime(1800, 12, 28, 0, 0, 0); 
var theDate = date.AddDays(77207); 
+1

我更喜歡你的 - 刪除了我的 – RThomas

0

下面是我用號角日期轉換爲儒略曆的vb.net代碼:

Dim ldblDaysToSubtract As Double = 36161.0 

mclsRevEmployeeRecd.BirthDate(istrBirthDate:=(CDbl(E1Row.Item("BIRTH_DT")) - ldblDaysToSubtract).ToString) 

mstrBirthDate = Format(CDate(Date.FromOADate(CDbl(istrBirthDate)).ToString), "MM/dd/yyyy")