Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразование дата/время в double и обратно
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Troll
Доброго дня.

Собственно вопрос не поделится ли кто реализацией функций преобразования структуры дата/время в тип double и обратно.
Или где можно поискать, а то нахожу только вызовы "DateTimeToDouble", да "DoubleToDateTime".

Спасибо.
zltigo
Цитата(Troll @ Nov 29 2008, 09:23) *
"DateTimeToDouble", да "DoubleToDateTime".

Муть какая-то специфичная непонятно кем используемая. Если знаете что такое вообше это самое "double", то можете и сами написать по мотивам, например, unixtime
Troll
Цитата
Если знаете что такое вообше это самое "double", то можете и сами написать по мотивам, например, unixtime

Да знаю я, что такое "double", со временем вообще никаких проблем, вот дату высчитывать сложнее wacko.gif.

Просто данные будут записывать на флэш карту, а с карты - в БД, вот и требуется записывать в требуемом формате.

И сам написать, конечно, могу, но если есть готовое, зачем "изобретать велосипед" и плодить ошибки.
sensor_ua
Может, Вы путаете double и long (или long long)? Вообще-то вариации на тему double и времени встречались где-то в Excel, но там и без этого не устанешь удивляться очень оригинальным решениямwink.gif
sergeeff
Может надо просто преобразовать unsigned int/double и обратно? Тогда и стандартные функции времени подойдут?
Сергей Борщ
Цитата(sensor_ua @ Nov 29 2008, 12:40) *
Вообще-то вариации на тему double и времени встречались где-то в Excel, но там и без этого не устанешь удивляться очень оригинальным решениямwink.gif
Хранение даты/времени в виде числа с плавающей точкой встречалось в Дельфях. На память: дата пакуется в целую часть, а время - в дробную. Т.е. час = 1/24, минута = 1/(24*60), секунда = 1/(24*60*60).
AHTOXA
Если в дельфёвый TDateTime (который на самом деле и есть double), то как-то так:

Код
#define    SEC_PER_DAY   86400  // число секунд в сутках
#define    DATE_1970   25569  // значение DateTime для 1.1.1970 (ноль time_t)

double unixtime2double(time_t t)
{
    double d = t;
    t /= SEC_PER_DAY; // делим на число секунд в сутках
    t += DATE_1970;    // добавляем смещение
    return t;
}
sergeeff
Это сильно смахивает на гадание на кофейной гуще. Надо четко знать, что за база данных и в каком виде она хочет иметь дату-время. Тогда и функцию наваять для этого.
Troll
Цитата
Может, Вы путаете double и long (или long long)
нет не путаю, точно double.

Цитата
Может надо просто преобразовать unsigned int/double и обратно? Тогда и стандартные функции времени подойдут?
Нет, надо из данных: число, месяц, год / час, минуты, секунды получить значение упакованное в double.

Цитата
На память: дата пакуется в целую часть, а время - в дробную. Т.е. час = 1/24, минута = 1/(24*60), секунда = 1/(24*60*60).
Да, да, этот самый double. smile.gif

База данных SQL.
AHTOXA
Цитата(Troll @ Dec 1 2008, 08:33) *
Да, да, этот самый double. smile.gif


Так я же выше дал пример. Для получения time_t из структуры с часами, минутами, етц (struct tm) используется mktime().
Troll
Цитата(AHTOXA @ Dec 1 2008, 12:24) *
Так я же выше дал пример. Для получения time_t из структуры с часами, минутами, етц (struct tm) используется mktime().

Спасибо, не знал, что в ANSI C есть функции для работы со временем. a14.gif

Почитал описания, mktime() и localtime() - это как раз то что мне надо. Спасибо за помощь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.