Войти

Показать полную графическую версию : Проверка даты и времени.


Jonik-Mnimonik
18-11-2007, 10:08
Здраствуйте, помогите пожалуйста решить следующую проблему.
Есть переменная data, data1 и vremja,vremja1, дата и время соответственно. Как сравнить мне data и data1, vremja и vremja1.
Формат переменных следующий. char data[]={"18.11.2007"}; char vremja[]={"10:03:46"};
Если я буду сравнивать с помощью strcmp, то ни чего не выйдит, так как если я буду сравнивать 18.11.2007 и 18.11.2008, то первая дата меньше чем вторая, а если буду сравнивать 29.11.2007 и 18.12.2007 то первая больше чем вторая, что не правильно.
Пожалуйста помогите.

pva
18-11-2007, 17:50
способов несколько.
1. привести некоторой библиотесной функцией всё к виду "сколько секунд прошло с 01.01.1900"
2. переделать всё в строчку правильного вида и сравнить strcmp ;-)
например: "Dd.Mm.Yyyy" переводим в вид "Yyyy-Mm-Dd". Чтобы 2 раза не гонять процессор по одной и той же строчке, сделаем функцию strcmp, в которую уже включен "переворот даты".


// если дата указана в неправильном виде, правильность результата не гарантируется

int date_strcmp(const char* date1, const char* date2)
{
static unsigned char const digit_idx[8] = {/*Yyyy*/ 6,7,8,9, /*Mm*/ 3,4, /*Dd*/ 0,1};

const unsigned char *begin = digit_idx;
const unsigned char *end = digit_idx + 8;

int result = -1;
while (begin!=end && 0==(result=date1[*begin]-date2[*begin])) ++begin;
return result;
}

Alexej77
18-11-2007, 20:49
C++ Builder:
char data[] = {"18.11.2007"};
char data1[] = {"18.11.2008"};

char vremja[] = {"10:03:46"};
char vremja1[] = {"10:04:46"};

if (StrToDate(data) > StrToDate(data1))
ShowMessage("data > data1");

if (StrToTime(vremja) > StrToTime(vremja1))
ShowMessage("vremja > vremja1");

suxxl
20-11-2007, 16:15
Здраствуйте, помогите пожалуйста решить следующую проблему.
Есть переменная data, data1 и vremja,vremja1, дата и время соответственно. Как сравнить мне data и data1, vremja и vremja1.
Формат переменных следующий. char data[]={"18.11.2007"}; char vremja[]={"10:03:46"};
Если я буду сравнивать с помощью strcmp, то ни чего не выйдит, так как если я буду сравнивать 18.11.2007 и 18.11.2008, то первая дата меньше чем вторая, а если буду сравнивать 29.11.2007 и 18.12.2007 то первая больше чем вторая, что не правильно.
Пожалуйста помогите.

А если наоборот? 20071129 в любом случае меньше чем 20071218. я именно так и сравнивал.




© OSzone.net 2001-2012