2012-05-17 38 views
5

* (Esto es para la base de datos de ISV, así que estoy tipo de la ingeniería inversa esto y no puedo cambiar) ...CLARION Fecha de Conversión C# + FECHA/menos

¿Cómo puedo hacer la siguiente fecha a int (Visa/versa) la conversión en C# ...

lo tanto, decir que la fecha es:

5/17/2012 

que se convierte a int

77207 

en la base de datos.

Al principio pensé que esta era una fecha juliana, pero no parece ser el caso. Estaba bromeando con el método de Julian Date Question, pero esto no coincide.

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 

He estado usando este SQL para hacer la conversión:

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

y parece que es exacta. ¿Cómo podría hacer esta conversión en C#? ¿Y alguien puede edificarme sobre en qué estándar se basa o es simplemente una conversión aleatoria? Gracias por adelantado.

+0

¿Has probado para ver si genera 5/18/2012 77208 o si 5/16/2012 genera 77206? – Josh

+0

@Josh Sí, así es como me di cuenta de ese poco de sql ... 5/18 = 77208 etc ... –

+0

Cambiar el nombre para el futuro Las personas con este problema –

Respuesta

5

Esto parece ser un Clarion Date:

el número de días que han transcurrido desde diciembre 28, 1800

supuestamente para, Display Clarion Dates In Excel Sólo se necesita

restando 36161 desde el valor y formateándolo como una fecha

+0

Good Call Josh, Great Links también –

0

Si se trata de una fórmula lineal, debe poder calcular la fórmula en forma de y = mx + b. Necesitarías un mínimo de dos puntos de datos.

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

Me gustó el tuyo mejor, borré el mío – RThomas

0

Este es el código vb.net utilizo para convertir Clarion Fecha de Julián Fecha:

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