Другие языки программирования и технологии

Как можно записать дату в одну переменную? Си

5 bit – под число
4 bit – под месяц
12 bit – под год (достаточно до 4095 года)
Пример:

#include <stdio.h>
#include <stdlib.h>
void flush(void) {
while (getchar() != '\n');
}
int day(void) {
int value = 0;
const char* msg = "Day: ";
printf(msg);
do {
while (!scanf_s("%i", &value)) {
printf(msg);
flush();
}
} while (!value || value > 31);
return value;
}
int month(void) {
int value = 0;
const char* msg = "Month: ";
printf(msg);
do {
while (!scanf_s("%i", &value)) {
printf(msg);
flush();
}
} while (!value || value > 12);
return value;
}
int year(void) {
int value = 0;
const char* msg = "Year: ";
printf(msg);
do {
while (!scanf_s("%i", &value)) {
printf(msg);
flush();
}
} while (!value || value > 4095);
return value;
}
int date(void) {
int box = 0;
int d = day();
int m = month();
int y = year();
box = y << 4;
box += m;
box <<= 5;
box += d;
return box;
}
void parse(int box) {
int d = box & 0x1F;
int m = (box >> 5) & 0xF;
int y = (box >> 9) & 0xFFF;
printf("%02i.%02i.%i\n", d, m, y);
}
int main(void) {
int box = date();
parse(box);
system("pause > nul");
}
Дима Кевбрин
Дима Кевбрин
84 359
Лучший ответ
Фёдор Сумкин Красиво и экономно. Вспоминаются битовые поля.
Например, вручную сохранять дату в виде кол-ва секунд от 01.01.1970 00:00:00 (unix timestamp). При использовании 64-битных целых чисел этого тебе для чего угодно хватит.

Или использовать стандартные типы struct tm или time_t, описанные в файле time.h
Олег Щупак
Олег Щупак
76 050
Алимжан Абдихадиров ну тут еще нюанс, что хранить не текущую дату, а ту которуб вводить пользователь, например в формате 10.09.2010 13:45
Михаил Гаврилов даты-время time_t - сравнивай и рапредеяй как надо -
используй - обычную сортировку

ps есть также
функция difftime - вычесляет разницу даты-времени в секундах

Похожие вопросы