|
|
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Как осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:02 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresКак осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде.Тип то какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:07 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Данные читаются из текствого файла.В файле они в виде Fri Dec 30 00:00:00 NOVT 2005.Данные приводятся к формату 2006-Dec-30 00:00:00.Тип char,но можно и др тип сделать,в чем собственно и вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:58 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresДанные читаются из текствого файла.В файле они в виде Fri Dec 30 00:00:00 NOVT 2005.Данные приводятся к формату 2006-Dec-30 00:00:00.Тип char,но можно и др тип сделать,в чем собственно и вопрос. Для простоты сравнения и скорости приводить нужно к типу unsigend long или time_t . см. time_t mktime(struct tm *tm); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:18 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Библиотечных ф-ций для перевода даты из такого формата в какой-нибудь стандартный (time_t, CTime (MFC)), по крайней мере в VC, нет. Так-что здесь наверное ручками поработать нужно :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:19 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresКак осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде. если работать со строковыми типами, которые поддерживают сравнение строк(например AnsiString в bcb), то можно работать и с форматом YYYY-MM-DD hh:mm:ss сравнение будет работать. а также везде есть некие типы, специально, предназначенные для работы с временем и датой, в bcb это TDateTime, там операторы сравнения переопределены. но это все для Си++, т.е. не для чистого Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:48 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
_БалтикаБиблиотечных ф-ций для перевода даты из такого формата в какой-нибудь стандартный (time_t, CTime (MFC)), по крайней мере в VC, нет. Так-что здесь наверное ручками поработать нужно :). Понятное дело придется поработать. Как по мне, так проще распарсить строку заполинть [SRC time.h(GCC)] struct tm { int tm_sec; /* seconds */ int tm_min; /* minutes */ int tm_hour; /* hours */ int tm_mday; /* day of the month */ int tm_mon; /* month */ int tm_year; /* year */ int tm_wday; /* day of the week */ int tm_yday; /* day in the year */ int tm_isdst; /* daylight saving time */ }; [/src] скормить структуру функции mktime и сравнивать числа, чем писать свой алгоритм сравнения. В VC, я думаю, найдется похожий инструмент. зы Я подозреваю автор скоро задаст вопрос как получить разницу между строковыми датами. Ответ: точно также, только нужно не сравнивать а отнимать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 15:32 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
_БалтикаБиблиотечных ф-ций для перевода даты из такого формата в какой-нибудь стандартный (time_t, CTime (MFC)), по крайней мере в VC, нет. Так-что здесь наверное ручками поработать нужно :).обычно sscanf+mktime хватает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 16:52 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Приведите пример с использованием sscanf и mktime. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 12:43 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
В каком формате вводится год в tm_year. Не воспринимает числа типа 1990 итд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 12:55 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresВ каком формате вводится год в tm_year. Не воспринимает числа типа 1990 итд. Вычти из 1990 1970 - в libc все даты от 0 часов 1 января 1970 года. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 13:45 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresВ каком формате вводится год в tm_year. Не воспринимает числа типа 1990 итд. Не знаю, поможет это тебе или нет, но вот пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Обратите внимание на: ++(newtime->tm_mon) и на: (1900+newtime->tm_year) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 13:45 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич mxlPostgresВ каком формате вводится год в tm_year. Не воспринимает числа типа 1990 итд. Вычти из 1990 1970 - в libc все даты от 0 часов 1 января 1970 года. не совсем так: MSDN Help tm structure, defined in TIME.H. ... timeptr Field Value tm_hour Hours since midnight (0 – 23) tm_mday Day of month (1 – 31) tm_min Minutes after hour (0 – 59) tm_mon Month (0 – 11; January = 0) tm_sec Seconds after minute (0 – 59) tm_wday Day of week (0 – 6; Sunday = 0) tm_yday Day of year (0 – 365; January 1 = 0) tm_year Year (current year minus 1900) tm_isdst Positive if daylight saving time is in effect; 0 if daylight saving time is not in effect; negative if status of daylight saving time is unknown. The C run- time library assumes the United States’s rules for implementing the calculation of Daylight Saving Time (DST). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 13:52 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Как в Си можно разобрать время в формате hh:mm:ss на отдельные составляющие: часы,минуты,секунды? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 13:55 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresКак в Си можно разобрать время в формате hh:mm:ss на отдельные составляющие: часы,минуты,секунды? Очень просто: Help по функции strtok(); + в качестве разделителя указать символ ':' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 14:01 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
strtok()-говно. Строки надо разбивать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 23:27 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
std::wstring-говно. Строки надо разбивать так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 00:51 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Я прав, а White Owl не прав. Следовательно, надо делать, как я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 13:00 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичЯ прав, а White Owl не прав. Следовательно, надо делать, как я написал. 1. Вопрос звучит "Сравнение дат на Си " СИ есть подмножеством С++.И sscanf попадает в это подмножество. 2. Вариант White Owl проще и надежнее и понятнее. Поэтому вариант White Owl более правелен чем ваш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 13:27 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
mxlPostgresКак осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде. Ето так просто, что не понимаю как можно спрашивать. Читаеш даты в стринги: char date1[20], date2[20]; .... // читать значения date1 и date2 if ( strcmp( date1, date2 ) < 0 ) { ...}; if ( strcmp( date1, date2 ) > 0 ) { ...}; if ( strcmp( date1, date2 ) == 0 ) { ...}; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 11:56 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Agent 007 mxlPostgresКак осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде. Ето так просто, что не понимаю как можно спрашивать. Читаеш даты в стринги: char date1[20], date2[20]; .... // читать значения date1 и date2 if ( strcmp( date1, date2 ) < 0 ) { ...}; if ( strcmp( date1, date2 ) > 0 ) { ...}; if ( strcmp( date1, date2 ) == 0 ) { ...}; А часовые пояса ты куда здесь засунешь, [censored] ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 12:09 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Agent 007 mxlPostgresКак осуществить сравнение дат на языке Си.Даты имеют формат YYYY-MM-DD hh:mm:ss.Нужно в конструкции if (data1<data2) { ... }. Почему-то не работает в таком виде. Ето так просто, что не понимаю как можно спрашивать. Читаеш даты в стринги: char date1[20], date2[20]; .... // читать значения date1 и date2 if ( strcmp( date1, date2 ) < 0 ) { ...}; if ( strcmp( date1, date2 ) > 0 ) { ...}; if ( strcmp( date1, date2 ) == 0 ) { ...}; А часовые пояса ты куда здесь засунешь, [censored] ? Если работаеш с GMT (UTC) нет часовые поясы. Все времевые данны сохраняются и сравняются в GMT, а только при изображение делается конверсия к локальное время. Думаю что ето правильный подход. Как думаеш, Сергей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 12:18 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Agent 007 Если работаеш с GMT (UTC) нет часовые поясы. Все времевые данны сохраняются и сравняются в GMT, а только при изображение делается конверсия к локальное время. Думаю что ето правильный подход. Как думаеш, Сергей? А почему бы time_t не сравнивать? Что быстрее-сравнение двух int-ов или двух строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 12:39 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Agent 007 Если работаеш с GMT (UTC) нет часовые поясы. Все времевые данны сохраняются и сравняются в GMT, а только при изображение делается конверсия к локальное время. Думаю что ето правильный подход. Как думаеш, Сергей? А почему бы time_t не сравнивать? Что быстрее-сравнение двух int-ов или двух строк? Правда, что сравнение двух time_t быстрее, но дефиниция time_t: typedef long time_t; В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 13:01 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Agent 007 Сергей Ильич Agent 007Как думаеш, Сергей? А почему бы time_t не сравнивать? Что быстрее-сравнение двух int-ов или двух строк? Правда, что сравнение двух time_t быстрее, но дефиниция time_t: typedef long time_t; В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а. Пустой разговор: В Cи все равно никакого времени кроме как 32-битного нет. MFC класс CTime - это обертка вокруг time_t. А чтобы получить время в виде строчки, надо сначала получить его как time_t, и потеря дискретности будет тут. Лично я использую FILETIME в своих программах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 16:01 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Agent 007 В 32 бит времевая информация неполная. Год только 7 бит, секунды через 2. Ето старая кодировка date:time из время ДОС-а. Где вы это вычитали? Дайте первоисточник pls. Мне не извесны 32 разрядные операционные системы, считающие время через секунду. Переполнение 32 разрядного time_t наступит : Считаем приблизительно 2^31 / 60*60*24*365 +1970 ~ = 2038 год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 17:22 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
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 стрингов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2006, 17:44 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
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. Если вызовы gettimeofday подвигать по коду видно что основную массу времени действительно съедает mktime У меня все сравнение занимает от 250- 450 микросекунд. Если кто напишет строковый сравнитель можно будет проверить. Программа легко дополняется операциями со временем. Код писался под Linux. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2006, 17:49 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
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. Если вызовы gettimeofday подвигать по коду видно что основную массу времени действительно съедает mktime У меня все сравнение занимает от 250- 450 микросекунд. Если кто напишет строковый сравнитель можно будет проверить. Программа легко дополняется операциями со временем. Код писался под Linux. Я уверен что даже только один из sscanf-ов теряет более времени чем strcmp. Сравнение времени будет точнее если вычислиш 1000 или 10000+ сравнения двух методов, чем ети микросекунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2006, 19:49 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Строки нужны для хранения имен, адресов или других слов. Для хранения дат нужно использовать специализированный целочисленный тип. Точка. Очень любят со строками работать индусы - им вообще другие типы не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2006, 20:55 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичСтроки нужны для хранения имен, адресов или других слов. Для хранения дат нужно использовать специализированный целочисленный тип. Точка. Очень любят со строками работать индусы - им вообще другие типы не нужны. Пропустил пояснить, что ето только твое мнение. А индусы не так глупые. Лучше бы сказал албанцы как храняют даты :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2006, 21:46 |
|
||
|
Сравнение дат на Си
|
|||
|---|---|---|---|
|
#18+
Agent 007 Я уверен что даже только один из sscanf-ов теряет более времени чем strcmp. Сравнение времени будет точнее если вычислиш 1000 или 10000+ сравнения двух методов, чем ети микросекунды. Сейчас разговор безпредметный. Вы напешите код, а потом сравнивать будем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2006, 11:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2031685]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
145ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 516ms |

| 0 / 0 |
