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

 
 
> перевод даты в юникс секунды, нужен код на си
super_puper
сообщение Aug 24 2015, 08:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 222
Регистрация: 14-12-12
Из: новосибирск
Пользователь №: 74 845



думал это очень распространено но потратил 2 часа не нашел кода на си для такой типичной операции.

формат: год месяц день минуты секунды перевести в секунды с 1970 года

желательно проверенный красивый код и наверное без циклов)

Сообщение отредактировал super_puper - Aug 24 2015, 09:05
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Aug 25 2015, 08:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(super_puper @ Aug 24 2015, 11:57) *
думал это очень распространено но потратил 2 часа не нашел кода на си для такой типичной операции.

формат: год месяц день минуты секунды перевести в секунды с 1970 года

желательно проверенный красивый код и наверное без циклов)

Перевод туда-сюда. Правда, начало эпохи 01.01.2000 00:00:00.
Коректно работет до 2100 года. Время добавить самостоятельно)
CODE
//-----------------------------------------------------------------------------
// void int_to_date(const DWORD jd, DWORD *y, DWORD *m, DWORD *d)
//-----------------------------------------------------------------------------
void int_to_date(const DWORD jd, DWORD *y, DWORD *m, DWORD *d)
{
int aa, bb, cc, dd, ee, mm, xx;

aa = jd + 2483589;
bb = (aa * 4 + 3) / 146097;
cc = aa - ((146097 * bb) >> 2);
dd = (4 * cc + 3) / 1461;
ee = cc - ((1461 * dd) >> 2);
mm = ((5 * ee + 2) * 13707) >> 21;

*d = ee - ((16043274 * mm + 209716) >> 19) + 1;
*m = mm + 3 - 12 * ((mm * 27) >> 8);
*y = 100 * bb + dd - 4800 + ((mm * 27) >> 8);
}

//-----------------------------------------------------------------------------
// DWORD date_to_int(DWORD y, DWORD m, const DWORD d)
//-----------------------------------------------------------------------------
DWORD date_to_int(DWORD y, DWORD m, const DWORD d)
{
if(m < 3)
{
m += 12;
y -= 1;
}
return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533;
}
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 26 2015, 04:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Aug 25 2015, 14:44) *
Перевод туда-сюда. Правда, начало эпохи 01.01.2000 00:00:00.
Коректно работет до 2100 года. Время добавить самостоятельно)

У меня круче rolleyes.gif
У Вас не хватает проверок на валидность заданной даты (чтобы не было 31 февраля).
Go to the top of the page
 
+Quote Post



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

 


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


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