2012-05-17 15 views
5

* (Questo è per il database ISV così mi tipo di Reverse Engineering questo e non posso cambiare) ...CLARION Data di Conversione C# + DATA ADD/sottrarre

Come posso fare il giorno successivo a int (visto/versa) la conversione in C# ...

Quindi dire la data è:

5/17/2012 

esso viene convertito in int

77207 

nel database.

All'inizio ho pensato che fosse una data giuliana, ma non sembra essere il caso. Stavo scherzando con il metodo da Julian Date Question tuttavia questo non corrisponde.

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 

Sto usando questo SQL per eseguire la conversione:

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

e sembra essere precisi. Come posso fare questa conversione in C#? E qualcuno può edificarmi su quale standard si basa o è semplicemente una conversione casuale. Grazie in anticipo.

+0

Hai provato a vedere se 5/18/2012 genera 77208 o se 2012/05/16 genera 77206? – Josh

+0

@Josh Sì, ecco come ho capito quel bit di sql ... 5/18 = 77208 ecc ... –

+0

Renaming for Future Persone che si imbattono in questo problema –

risposta

5

Questo sembra essere un Clarion Date:

il numero di giorni trascorsi dal 28 Dicembre 1800

Presumibilmente a, Display Clarion Dates In Excel richiede solo

sottraendo 36161 dal valore e formattandolo come data

+0

Good Call Josh, Great Links anche –

0

Se è una formula lineare, dovresti essere in grado di calcolare la formula sotto forma di y = mx + b. Avresti bisogno di almeno due punti dati.

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

Mi è piaciuto il tuo meglio - ha cancellato il mio – RThomas

0

ecco il codice vb.net che uso per convertire Clarion Data di Julian Data:

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")