powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сравнение дат на Си
7 сообщений из 32, страница 2 из 2
Сравнение дат на Си
    #33624311
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agent 007
В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а.

Где вы это вычитали? Дайте первоисточник pls.

Мне не извесны 32 разрядные операционные системы,
считающие время через секунду.

Переполнение 32 разрядного time_t наступит :
Считаем приблизительно
2^31 / 60*60*24*365 +1970 ~ = 2038 год.
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33624377
Agent 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
onstat- Agent 007
В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а.

Где вы это вычитали? Дайте первоисточник pls.

Мне не извесны 32 разрядные операционные системы,
считающие время через секунду.

Переполнение 32 разрядного time_t наступит :
Считаем приблизительно
2^31 / 60*60*24*365 +1970 ~ = 2038 год.

Ок, виноват я. Думал о кодировке дата:час в 32 бит как у файлы в FAT, а в етом случае time_t секунды от 1970... Но - смотря на оригинального сообщения mxlPostgres, я думаю что ему сравнение нужно в связи с БД. Конверсия БД->time_t + сравнение 2 int будет медленно, чем БД->стринг_в_формате_YYYY-MM-DD... + сравнение 2 стрингов.
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33625296
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agent 007 onstat- Agent 007
В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а.

Где вы это вычитали? Дайте первоисточник pls.

Мне не извесны 32 разрядные операционные системы,
считающие время через секунду.

Переполнение 32 разрядного time_t наступит :
Считаем приблизительно
2^31 / 60*60*24*365 +1970 ~ = 2038 год.

Ок, виноват я. Думал о кодировке дата:час в 32 бит как у файлы в FAT, а в етом случае time_t секунды от 1970... Но - смотря на оригинального сообщения mxlPostgres, я думаю что ему сравнение нужно в связи с БД. Конверсия БД->time_t + сравнение 2 int будет медленно, чем БД->стринг_в_формате_YYYY-MM-DD... + сравнение 2 стрингов.

в БД есть функции сравнения дат.
Если бы автора интресовал вопрос относительно бд
он бы обратился в раздел соответствующий его базе.

Если говорить о сравнении строковых дат и чиловых, то
давайте померяем.

Мне лень писать строковый сравнитель а вот
числовой пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
/**********************************************************************
*  Time comparation  example  for   SQL.RU 
*
************************************************************************/

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>

struct tm tm_1;  // first time parameter
struct tm tm_2;  // second time parameter
struct timeval s_time; // start time
struct timeval e_time; // end time
time_t l_time1= 0 ;        // first time in a  digit format
time_t l_time2= 0 ;        // second time in a digit format

char cres[ 16 ] ="less then\0";  //character result

int res; // any results

/********************************************************************
*********************************************************************/

int main(int argc, char* argv[])
{

if(argc <  3  )
{
printf ("Invalid number of parameters\n");
return - 1 ;
};

bzero(&tm_1, sizeof(tm));
bzero(&tm_2, sizeof(tm));
bzero(&s_time, sizeof(timeval));
bzero(&e_time, sizeof(timeval));


gettimeofday(&s_time, NULL);  // save start time point

//parsing first parameter
res=sscanf(argv[ 1 ], "%4d-%2d-%2d:%2d:%2d:%2d", 
&tm_1.tm_year, &tm_1.tm_sec,  &tm_1.tm_mon,  &tm_1.tm_mday, &tm_1.tm_hour, &tm_1.tm_min, &tm_1.tm_sec );
if (res !=  6 ) 
{
printf("Invalid format on %s\n Must be a YYYY-MM-DD:HH24:MI:SS \n", argv[ 1 ]);
return - 1 ;
};
tm_1.tm_year=tm_1.tm_year- 1900 ;



//parsing second parameter
res=sscanf(argv[ 2 ], "%4d-%2d-%2d:%2d:%2d:%2d", &tm_2.tm_year, &tm_2.tm_sec,  &tm_2.tm_mon,  &tm_2.tm_mday, &tm_2.tm_hour, &tm_2.tm_min, &tm_2.tm_sec );
if (res !=  6 ) 
{
printf("Invalid format on %s\n Must be a YYYY-MM-DD:HH24:MI:SS \n", argv[ 2 ]);
return - 1 ;
};
tm_2.tm_year=tm_2.tm_year- 1900 ;

l_time1=mktime(&tm_1);
l_time2=mktime(&tm_2);


if(l_time1 > l_time2) sprintf(&cres[ 0 ],  "more then\0");
if(l_time1 == l_time2) sprintf(&cres[ 0 ], "equal to\0");

gettimeofday(&e_time, NULL); // save end time point

printf( "%s %s %s\n", argv[ 1 ], &cres[ 0 ], argv[ 2 ] );
printf ("comparaion takes 0.%.6d second\n", e_time.tv_usec - s_time.tv_usec);

return  0 ;
};

Если вызовы gettimeofday подвигать по коду видно что
основную массу времени действительно съедает mktime

У меня все сравнение занимает от 250- 450 микросекунд.
Если кто напишет строковый сравнитель можно будет проверить.

Программа легко дополняется операциями со временем.

Код писался под Linux.
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33625391
Agent 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
onstat- Agent 007 onstat- Agent 007
В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а.

Где вы это вычитали? Дайте первоисточник pls.

Мне не извесны 32 разрядные операционные системы,
считающие время через секунду.

Переполнение 32 разрядного time_t наступит :
Считаем приблизительно
2^31 / 60*60*24*365 +1970 ~ = 2038 год.

Ок, виноват я. Думал о кодировке дата:час в 32 бит как у файлы в FAT, а в етом случае time_t секунды от 1970... Но - смотря на оригинального сообщения mxlPostgres, я думаю что ему сравнение нужно в связи с БД. Конверсия БД->time_t + сравнение 2 int будет медленно, чем БД->стринг_в_формате_YYYY-MM-DD... + сравнение 2 стрингов.

в БД есть функции сравнения дат.
Если бы автора интресовал вопрос относительно бд
он бы обратился в раздел соответствующий его базе.

Если говорить о сравнении строковых дат и чиловых, то
давайте померяем.

Мне лень писать строковый сравнитель а вот
числовой пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
/**********************************************************************
*  Time comparation  example  for   SQL.RU 
*
************************************************************************/

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>

struct tm tm_1;  // first time parameter
struct tm tm_2;  // second time parameter
struct timeval s_time; // start time
struct timeval e_time; // end time
time_t l_time1= 0 ;        // first time in a  digit format
time_t l_time2= 0 ;        // second time in a digit format

char cres[ 16 ] ="less then\0";  //character result

int res; // any results

/********************************************************************
*********************************************************************/

int main(int argc, char* argv[])
{

if(argc <  3  )
{
printf ("Invalid number of parameters\n");
return - 1 ;
};

bzero(&tm_1, sizeof(tm));
bzero(&tm_2, sizeof(tm));
bzero(&s_time, sizeof(timeval));
bzero(&e_time, sizeof(timeval));


gettimeofday(&s_time, NULL);  // save start time point

//parsing first parameter
res=sscanf(argv[ 1 ], "%4d-%2d-%2d:%2d:%2d:%2d", 
&tm_1.tm_year, &tm_1.tm_sec,  &tm_1.tm_mon,  &tm_1.tm_mday, &tm_1.tm_hour, &tm_1.tm_min, &tm_1.tm_sec );
if (res !=  6 ) 
{
printf("Invalid format on %s\n Must be a YYYY-MM-DD:HH24:MI:SS \n", argv[ 1 ]);
return - 1 ;
};
tm_1.tm_year=tm_1.tm_year- 1900 ;



//parsing second parameter
res=sscanf(argv[ 2 ], "%4d-%2d-%2d:%2d:%2d:%2d", &tm_2.tm_year, &tm_2.tm_sec,  &tm_2.tm_mon,  &tm_2.tm_mday, &tm_2.tm_hour, &tm_2.tm_min, &tm_2.tm_sec );
if (res !=  6 ) 
{
printf("Invalid format on %s\n Must be a YYYY-MM-DD:HH24:MI:SS \n", argv[ 2 ]);
return - 1 ;
};
tm_2.tm_year=tm_2.tm_year- 1900 ;

l_time1=mktime(&tm_1);
l_time2=mktime(&tm_2);


if(l_time1 > l_time2) sprintf(&cres[ 0 ],  "more then\0");
if(l_time1 == l_time2) sprintf(&cres[ 0 ], "equal to\0");

gettimeofday(&e_time, NULL); // save end time point

printf( "%s %s %s\n", argv[ 1 ], &cres[ 0 ], argv[ 2 ] );
printf ("comparaion takes 0.%.6d second\n", e_time.tv_usec - s_time.tv_usec);

return  0 ;
};

Если вызовы gettimeofday подвигать по коду видно что
основную массу времени действительно съедает mktime

У меня все сравнение занимает от 250- 450 микросекунд.
Если кто напишет строковый сравнитель можно будет проверить.

Программа легко дополняется операциями со временем.

Код писался под Linux.

Я уверен что даже только один из sscanf-ов теряет более времени чем strcmp. Сравнение времени будет точнее если вычислиш 1000 или 10000+ сравнения двух методов, чем ети микросекунды.
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33625431
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строки нужны для хранения имен, адресов или других слов. Для хранения дат нужно использовать специализированный целочисленный тип. Точка. Очень любят со строками работать индусы - им вообще другие типы не нужны.
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33625458
Agent 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей ИльичСтроки нужны для хранения имен, адресов или других слов. Для хранения дат нужно использовать специализированный целочисленный тип. Точка. Очень любят со строками работать индусы - им вообще другие типы не нужны.

Пропустил пояснить, что ето только твое мнение. А индусы не так глупые. Лучше бы сказал албанцы как храняют даты :)
...
Рейтинг: 0 / 0
Сравнение дат на Си
    #33625615
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agent 007
Я уверен что даже только один из sscanf-ов теряет более времени чем strcmp. Сравнение времени будет точнее если вычислиш 1000 или 10000+ сравнения двух методов, чем ети микросекунды.

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


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