LINUX.ORG.RU

Или же какие нибуть быстрые алгоритмы упаковки года, месяца, дня, часа, минуты, секунды.

Devix
() автор топика

Решил так упаковывать:
(год*12+(месяц-1)) << 32 + день*24*60*60 + час*60*60 + минута*60 + секунда

Devix
() автор топика
Ответ на: комментарий от beastie

Ладно напишу по точнее:
uint64_t d = (uint64_t)(год*12+месяц-1) << 32 + (день*24*60*60 + час*60*60 + минута*60 + секунда);

Нету в контроллере libc, и еще нужен быстраы алгоритм.

Devix
() автор топика
Ответ на: комментарий от Devix

я бы всё-таки заглянул в mktime, ибо unixtime -- это не время в секундах данного года, как оно по всей видимости у тебя (может оно и не так -- я честно признатся не вдумывался), а время в секундах с 01.01.70, включая все высокостные секунды и другие сингулярности.

beastie ★★★★★
()
Ответ на: комментарий от true_admin

В том то и прикол что я разделил год, месяц и день, час, минута, секунда, тоесть у меня это две отдельные величины.

Вот еще проще для понимания оптимизированный по размеру(6байт):
uint16_t year_and_month = (год*12 + месяц - 1);
uint32_t day_hour_min_sec = день*24*60*60 + час*60*60 + минута*60 + секунда;

Добавление leap second никак на результат не повлияет.

Devix
() автор топика
Ответ на: комментарий от Devix

year_and_month - сколько месяцев прошло
day_hour_min_sec - сколько секунд прошло от начала месяца

Devix
() автор топика
Ответ на: комментарий от Devix

Быстрые работают только в очень ограниченных временнЫх интервалах.

Например, уже в этом веке как минимум раза два, если не три, смещение на секунду использовали для коррекции.

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymfus

>По любому 4-х байт хватит только на 136 лет.

Можно как в DOS когда-то, секунды пополам поделить. Тогда вдвое дольше хватит :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

а мне от куда то знать, как оно по-рюсськи будит. невзищите -- по-русски я только тут и общаюсь. забывать начал-с.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.