Игорюха |
Отправлено: 21.03.2007, 15:00 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
Приходят файлы, в фалах указаны даты, единого стандарта нет, поэтому они пишут что попало, могут так написать 1999-01-01, могут так 01011999, еще так 01.01.99, вообщем примеров много. Вопрос такой есть такая функция которая имеет может может преобразовать к какому то определенному формату, если есть то подскажите, или придется анализировать строку? |
|
Admin |
Отправлено: 21.03.2007, 16:23 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
придется анализировать строку
|
|
Игорюха |
Отправлено: 21.03.2007, 17:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
мда...
А как проверить на корректность дату.
Есть строка например:"01.02.2006" как проверить корректна ли дата? |
|
Guest |
Отправлено: 21.03.2007, 17:30 |
|
Не зарегистрирован
|
Встречный вопрос — а как вы определите это первое февраля или второе января? А если еще год задан двумя цифрами. |
|
Игорюха |
Отправлено: 21.03.2007, 17:35 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
ну вообщем там месяц всегда второй в списке, а год если стоит 1 то всегда пишут 4 цифры, а если выражени типа: "01/02/03" то год брать последним, т.е. год = 2003 |
|
Игорюха |
Отправлено: 21.03.2007, 17:37 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
А про проверку коректности даты мне кто-нибудь скажет полезное? |
|
Guest |
Отправлено: 21.03.2007, 18:21 |
|
Не зарегистрирован
|
QUOTE |
А про проверку коректности даты мне кто-нибудь скажет полезное?
|
Легко.
Разбиваете строку на группы цифр.
Определяетесь какая из групп за что отвечает (число, месяц, год).
Анализируете
- год подходит?
- месяц в диапазоне [1 — 12]?
- число>= 1 и не больше числа дней в этом месяце этого года?
Проверки можно возложить на конструктор TDateTime
Информация к размышлению:
А ведь пользователи могут еще вводить месяц и буковками |
|
Ramzay |
Отправлено: 22.03.2007, 10:16 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
Есть еще вариант. Допустим ты получил дату в виде строки DateStr. DateStr может быть в разных форматах:
CODE |
AnsiString Format1= "dd.mm.yy"
AnsiString Format2= "dd-mm- yy"
AnsiString Format3= "dd-mm-yyyy"
. . .
|
Дальше пробуем поочередно перекодировать дату DateStr в соответствии со списком форматов:
CODE |
TDateTime MyDate=NULL;
ShortDateFormat=Format1;
try
{
StrToDate(DateStr); // пробуем перекодировать
}
catch(...) // если перекодирвать не удалось, ошибки не будет
{;}
if(MyDate) // если перекодировать удалось, выходим
return MyDate;
ShortDateFormat=Format2;try { StrToDate(DateStr);}catch(...) {;} if(MyDate) return MyDate;
ShortDateFormat=Format3;try { StrToDate(DateStr);}catch(...) {;} if(MyDate) return MyDate;
. . .
|
Moжно организовать массив, список, цикл, загрузку списка форматов из файла и т.д. Это уже нужно смотреть по месту.
Отредактировано Ramzay — 22.03.2007, 10:17 |
|