Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразование даты / 10 сообщений из 10, страница 1 из 1
25.07.2006, 11:24
    #33875948
avk_soft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Следующий вопросик по языку С.
Представление даты может выглядеть как некое число от 01.01.1900.
Существует ли какая либо функция API позволяющая выделить из этого числа день, месяц, год.
И наоборот из трех составляющих (день, месяц, год) сложить данное число.
...
Рейтинг: 0 / 0
25.07.2006, 11:28
    #33875983
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
avk_soft
as> Следующий вопросик по языку С.
as> Представление даты может выглядеть как некое число от
as> 01.01.1900. Существует ли какая либо функция API
В С уже есть API ???
Да и кто же знает, как ты это таинственное число получаешь
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25.07.2006, 11:40
    #33876033
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Возможно вам поможет ctime, asctime, mktime.
...
Рейтинг: 0 / 0
25.07.2006, 11:51
    #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
25.07.2006, 12:10
    #33876208
Akh
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
25.07.2006, 14:51
    #33876970
avk_soft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Но ведь в соответствии с документацией
при значении time_t tt = 0
функция ctime(&tt) вернет 01.01.1970
Как же быть с датами до 01.01.1970 ?
...
Рейтинг: 0 / 0
25.07.2006, 15:03
    #33877026
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
avk_softНо ведь в соответствии с документацией
при значении time_t tt = 0
функция ctime(&tt) вернет 01.01.1970
Как же быть с датами до 01.01.1970 ?

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

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

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

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

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

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

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


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