2010-04-09 3 views
4

Мне было поручено прочитать некоторые данные из какой-то странной старой системы.
Система содержит много дат, но все они странно отформатированы. Они представляют собой целые числа в диапазоне от приблизительно 55,000 до 80,000.Какой календарь, по-видимому, насчитывает дни с 28 декабря 1800 года?

Я знаю двух дат наверняка:

58,112 equals February 5, 1960 (originally written as Feb 2,1960 [*]) 
61,439 equals March 16, 1969 

[*] This typo explains some of the comments initially challenging the 
    leap-year awareness of the calendar. 

Мне кажется, что эти целые числа являются количество дней, прошедших с 28 декабря 1800. Но я думаю, что это очень странно, дата начала календарь на. Вероятно, что-то происходит с високосными годами, а что - не то, что вызовет проблемы позже.

Кто-нибудь знает этот календарь? Может ли кто-нибудь сказать мне, какой правильный способ конвертировать эти целые числа в понятные человеку даты?

+0

Вы уверены, что это не 1 января 1801 года, и вы просто пропустили какие-то високосные дни или что-то еще? – falstro

+0

Это не так странно. Например, дата на Javacards рассчитывается по аналогичной схеме, начиная с 1986-02-04: http://forums.sun.com/thread.jspa?threadID=5421557&messageID=10894720#10894720 –

+0

@roe: Нет, я не совершенно уверен. Хотя между 1960 и 1969 годами существует один високосный год. Вот почему я спрашиваю здесь. Я надеюсь, что кто-то узнает этот календарь. У меня была такая же проблема, когда я впервые столкнулся с календарем Julian Day внутри SQLite. –

ответ

3

походит на заказ системы для меня, но довольно странно :)

один способ преобразования, который всегда будет работать, это использовать какой-то DATE_ADD() функции - вы не указали, какой язык» но большинство современных языков должны иметь возможность добавить кучу дней к дате.

Что касается високосных лет, если эти 2 даты правильные, то у вас не должно быть проблем, было определенно, по крайней мере, 1 високосный год между 1960 и 1969 годами :), это определенно стоит проверить еще несколько последних дат, чтобы убедиться хоть.

6

Это может быть Clarion. Я работаю с аналогичным старым преобразованием базы данных в SQL, и он выяснил, что файлы (* .dat) были clarion

+0

+1 Я думаю, что это Clarion –

+1

+1, я тоже думаю, что это может быть [Clarion] (https://en.wikipedia.org/wiki/Clarion_ (programming_language)), коммерческий язык программирования. Clarion сериализует даты как количество дней с 28 декабря 1800 года. Если есть также поля времени, они сохраняются как число 100-х секунд с полуночи + 1. Даты Clarion легко конвертируются используя [Excel] (http://archive.clarionmag.com/cmag/v4/v4n12exceldates.html), [MSSQL] (https://gist.github.com/fushnisoft/5857270) и [C#] (http: //www.iprogrammable.com/2007/07/31/clarion-date-and-time-in-net/). – GHH

+0

Но почему Кларион использует эту дату в первую очередь? – Dai

3

Я работаю с системой, представляющей gregorian даты в юлианском календаре, если вы хотите конвертировать юлианскую дату в григорианский, вам нужно только добавить количественные дни до 28 декабря 1800.

в SQL Server:

SELECT DATEADD(day, 58112, '18001228') 

на примере. Извините, я не говорю по-английски. Базовая дата в вашей системе - 28 декабря 1800.

1

Да, это файлы Clarion Data. Использовать Edit1.Text: = datetostr (encodedate (1800,12,28));

 Смежные вопросы

  • Нет связанных вопросов^_^