Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упаковывание даты с double(8 байт) 
:(
    Опции темы
Brodyaga
Дата 28.11.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Всем доброго времени суток! Мне нужно как то представить дату в виде числа типа double, тоесть зная целочисленные значения года, месяца, дня, часа, минут и секунд используя какой-либо алгоритм упаковать их в одно число double... Какие предложения?
PM MAIL   Вверх
Hades
Дата 28.11.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 8.8.2008

Репутация: нет
Всего: 37



а год в каком формате, 2 или 4 цифры?

Алгоритм
Код

максимальные значения:
месяцы  - 12   m1
дни     - 31   m2
часы    - 23   m3
минуты  - 59   m4
секунды - 59   m5
годы    - 99   m6    (2 цифры)


        j<i
ki = sum(mj*kj) + 1;
        j=1
 
i = 1, 2, 3, 4, 5, 6;

k1 = 1;
k2 = 13;
k3 = 416;
k4 = 9984;
k5 = 599040;
k6 = 35942400;

число = ((((m1*к1 + m2*к2) + m3*к3) + m4*к4) + m5*к5) + m6*к6;
m6 =  число / k6;
m5 = число%k6/k5;
m4 = число%k6%k5/k4;
...

Только я не уверен, будет ли нормально работать с double.

Код

int main() {
    unsigned long arhiv = 0;
    int data[6] = {12,  // месяцы
                    1,  // дни
                   23,  // часы
                   50,  // минуты
                   59,  // секунды
                   98}; // годы
    long coef[6] = {1, 13, 416, 9984, 599040, 35942400};

    for(int i = 0 ; i < 6; ++i)
        arhiv += data[i]*coef[i];

    cout << arhiv << endl << endl;

    for(i = 5; i >= 0; --i) {
        cout << (arhiv/coef[i]) << endl;
        arhiv %= coef[i];
    }

    return 0;
}

PM MAIL   Вверх
maxim1000
Дата 28.11.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



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

но, честно говоря, не помню уже где встречал...


--------------------
qqq
PM WWW   Вверх
Brodyaga
Дата 29.11.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

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

но, честно говоря, не помню уже где встречал...


В исходниках дельфи ;)
PM MAIL   Вверх
ksnk
Дата 29.11.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Все же просто. Считаем число дней, прошедшее с 1970 года (к примеру) - это - целое число.
Считаем число секунд, прошедшее с начала дня. Делим на 24*60*60 - получаем дробную часть...

Считать число дней от даты до даты - задачка несложная, но муторная. проще языковыми функциями воспольваться.

да и в double системными функциями дату перегнать значительно проще smile

Язык-то какой?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Brodyaga
Дата 29.11.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

да и в double системными функциями дату перегнать значительно проще smile

Язык-то какой?


MSVC 2005, C++
PM MAIL   Вверх
ksnk
Дата 29.11.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Если мне не изменяет мой склероз - под такие даты заточен класс CTime. Впрочем - не уверен, на С++ писал немного и давно smile


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
DenVdmj
Дата 29.11.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



может не надо ничего упаковывать? проще хранить секунды с начала эпохи.
PM MAIL   Вверх
Brodyaga
Дата 30.11.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

может не надо ничего упаковывать? проще хранить секунды с начала эпохи.


Ну дык а как ты эти секунды из даты получишбь то? smile В этом то и вопрос, получил секунды и присвоил их например лонгу.. или дабл тому же, вот и упаковал ;)
PM MAIL   Вверх
Brodyaga
Дата 30.11.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Hades,
Цитата

а год в каком формате, 2 или 4 цифры?


4

Цитата

        j<i
ki = sum(mj*kj) + 1;
        j=1
 
i = 1, 2, 3, 4, 5, 6;

k1 = 1;
k2 = 13;
k3 = 416;
k4 = 9984;
k5 = 599040;
k6 = 35942400;


чтото я не понял это что за числа? и почему в формуле +1? поясни пожалуйста...
PM MAIL   Вверх
Brodyaga
Дата 30.11.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Если мне не изменяет мой склероз - под такие даты заточен класс CTime. Впрочем - не уверен, на С++ писал немного и давно smile 


Это MFC. Я MFC не использую...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.