powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразование даты
10 сообщений из 10, страница 1 из 1
Преобразование даты
    #33875948
avk_soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Следующий вопросик по языку С.
Представление даты может выглядеть как некое число от 01.01.1900.
Существует ли какая либо функция API позволяющая выделить из этого числа день, месяц, год.
И наоборот из трех составляющих (день, месяц, год) сложить данное число.
...
Рейтинг: 0 / 0
Преобразование даты
    #33875983
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avk_soft
as> Следующий вопросик по языку С.
as> Представление даты может выглядеть как некое число от
as> 01.01.1900. Существует ли какая либо функция API
В С уже есть API ???
Да и кто же знает, как ты это таинственное число получаешь
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Преобразование даты
    #33876033
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно вам поможет ctime, asctime, mktime.
...
Рейтинг: 0 / 0
Преобразование даты
    #33876097
avk_soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен вопрос вполне возможно задан некорректно.
Приработе с библиотекой DB-library существует следующая структура:

typedef struct dbdatetime4
{ unsigned short numdays; // number of days since 1/1/1900
unsigned short nummins; // number of minutes sicne midnight
} DBDATETIM4;

Вопрос с том каким образом посредством каких либо библиотек С извлеч значение дня, месяца, года ?
...
Рейтинг: 0 / 0
Преобразование даты
    #33876208
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
    time_t tt;


    tt=(long)( 12000 /*days*/)* 86400  -  3 * 3600 /*my timezone*/;
    printf("%s\n", ctime(&tt));

man
Функция ctime(t) является эквивалентом asctime(localtime(t)). Она преобразует календарное время t в строку формат
а

"Wed Jun 30 21:49:08 1993\n"

А б бревиатуры дней недели: ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’ и ‘Sat’. Аббревиатуры месяцев: ‘Jan’, ‘Feb’,
‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’ и ‘Dec’. Возвращаемое значение указывает на статичес
к и размещеннуюстроку, которая может быть заново записана с помощью последовательности вызовов любых функцийдаты и
времени. Функция также устанавливает значение внешней переменной tzname (см. tzset(3)) равным значению текущей вр
еменной зоны. Реентрантная версия ctime_r() делает то же самое, но заносит строку вбуфер, предоставляемый пользов
ателем. Длина буфера должна быть не менее 26 байт. Устанавливать tzname необязательно.
...
Рейтинг: 0 / 0
Преобразование даты
    #33876970
avk_soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но ведь в соответствии с документацией
при значении time_t tt = 0
функция ctime(&tt) вернет 01.01.1970
Как же быть с датами до 01.01.1970 ?
...
Рейтинг: 0 / 0
Преобразование даты
    #33877026
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avk_softНо ведь в соответствии с документацией
при значении time_t tt = 0
функция ctime(&tt) вернет 01.01.1970
Как же быть с датами до 01.01.1970 ?

Сорри, только сейчас заметил, что у тебя с 1900 года. Даты начинющиеся с 1/1/19xx у меня уже воспринимаются как 1970-й. :)
...
Рейтинг: 0 / 0
Преобразование даты
    #33877095
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даты считаются так:
год % 4 - високосный
год % 100 - невисокосный
год % 400 (или на 1000 - хз) - високосный.

Факт в том, что внутри столетия имеет значение только первое и второе правило, значит, можно поступить так:
Сначала надо будет определить сколько минут в 4-х годах = X
Потом для каждой даты:
1. Посмотреть, дата у нас меньше или равна 28-му февралю 1900-го года (в минутах это не сложно посчитать)? Если меньше, то вычесть из даты 1 день (т.е. поправка на невисокосный 1900-й год для дальнейших расчетов)
2. разделить твои минуты на X без остатка - это у нас будет количество 4-х годичных периодов
3. отсаток от деления приобразовать в строку с датой.
4. вычесть из строки нужное количество лет.

Но это крайний вариант. Может найдешь функцию, чтобы не заниматься этой мутатой.
...
Рейтинг: 0 / 0
Преобразование даты
    #33877110
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, забыл про 2000-й, он високосным был.

Надо будет посчитать Y для 0:0:0 1/1/2000, и если дата (т.е. количество минут) больше, то прибавить 1 день.
...
Рейтинг: 0 / 0
Преобразование даты
    #33877116
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhБлин, забыл про 2000-й, он високосным был.

Надо будет посчитать Y для 0:0:0 1/1/2000, и если дата (т.е. количество минут) больше, то прибавить 1 день.

Ну, все сори. Опять ошибся. Не надо прибавлять, т.к. он учитывается как обычный кратный 4-м.

Теперь алгоритм должен быть верным.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразование даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]