CLARION Преобразование даты C# + DATE ADD/SUBTRACT

*(Это для базы данных ISV, так что я как бы реверс-инжиниринг это и не могу изменить) ...

Как я могу сделать следующее преобразование даты в int (visa/ наоборот) в C# ...

Так скажи, дата:

5/17/2012

это преобразуется в Int

77207

в базе данных.

Сначала я подумал, что это была юлианская дата, но, похоже, это не так. Я дурачился с методом из вопроса о дате Джулиана, однако это не совпадает.

   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#? И может ли кто-нибудь поучить меня относительно того, на каком стандарте это основано, или это просто случайное преобразование. Заранее спасибо.

4 ответа

Решение

Похоже, это дата Clarion:

количество дней, прошедших с 28 декабря 1800 года

Якобы для отображения даты Clarion В Excel это займет всего

вычитая 36161 из значения и форматируя его как дату

//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);

Вот код vb.net, который я использую, чтобы преобразовать Clarion Date в Julian Date:

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

Если это линейная формула, вы должны быть в состоянии вычислить формулу в виде y=mx+b. Вам потребуется минимум две точки данных.

Другие вопросы по тегам