реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Преобразование дата/время в double и обратно
Troll
сообщение Nov 29 2008, 06:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Доброго дня.

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

Спасибо.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 29 2008, 06:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Troll @ Nov 29 2008, 09:23) *
"DateTimeToDouble", да "DoubleToDateTime".

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Troll
сообщение Nov 29 2008, 10:05
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата
Если знаете что такое вообше это самое "double", то можете и сами написать по мотивам, например, unixtime

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

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

И сам написать, конечно, могу, но если есть готовое, зачем "изобретать велосипед" и плодить ошибки.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Nov 29 2008, 10:40
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Может, Вы путаете double и long (или long long)? Вообще-то вариации на тему double и времени встречались где-то в Excel, но там и без этого не устанешь удивляться очень оригинальным решениямwink.gif


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 29 2008, 10:46
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Может надо просто преобразовать unsigned int/double и обратно? Тогда и стандартные функции времени подойдут?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 29 2008, 11:55
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sensor_ua @ Nov 29 2008, 12:40) *
Вообще-то вариации на тему double и времени встречались где-то в Excel, но там и без этого не устанешь удивляться очень оригинальным решениямwink.gif
Хранение даты/времени в виде числа с плавающей точкой встречалось в Дельфях. На память: дата пакуется в целую часть, а время - в дробную. Т.е. час = 1/24, минута = 1/(24*60), секунда = 1/(24*60*60).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2008, 20:26
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Если в дельфёвый 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;
}


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 29 2008, 23:16
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Это сильно смахивает на гадание на кофейной гуще. Надо четко знать, что за база данных и в каком виде она хочет иметь дату-время. Тогда и функцию наваять для этого.
Go to the top of the page
 
+Quote Post
Troll
сообщение Dec 1 2008, 03:33
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата
Может, Вы путаете double и long (или long long)
нет не путаю, точно double.

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

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

База данных SQL.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 1 2008, 06:24
Сообщение #10


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


Так я же выше дал пример. Для получения time_t из структуры с часами, минутами, етц (struct tm) используется mktime().


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Troll
сообщение Dec 2 2008, 05:42
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



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

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

Почитал описания, mktime() и localtime() - это как раз то что мне надо. Спасибо за помощь.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 12:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01481 секунд с 7
ELECTRONIX ©2004-2016