Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
ВнизПреобразование строки разных форматов в дату. Найти похожие ветки
← →
Delph (2002-02-27 13:53) [0]На входе строка с датой, причем в разных форматах, формат известен. Нет ли функции, которая корректно преобразует строку и вернет переменную TDateTime?
Например:
Stroka := "01.2003";
Format := "mm.yyyy";
d := SampleFunction(Stroka, Format);
Формат м.б. разный. Может кто встречал подобное? Спасибо.
← →
fnatali (2002-02-27 13:59) [1]А FormatDateTime не подходит?
← →
Юрий Зотов (2002-02-27 14:01) [2]F1.
StrToDate.
ShortDateFormat.
← →
Delph (2002-02-27 14:18) [3]Мне надо получить дату, а не строку.
FormatDateTime возвращает строку,
как использовать ShortDateFormat? Можно маленький пример?
← →
DieHard (2002-02-27 14:44) [4]DateSeparator:=".";
ShortDateFormat:="mm.yyyy";
d:=StrToDate(Stroka);
← →
Delph (2002-02-27 14:56) [5]Не проходит - исключение :(
procedure TForm1.Button1Click(Sender: TObject);
var
d: TDateTime;
begin
DateSeparator:=".";
ShortDateFormat:="mm.yyyy";
ShowMessage(DateToStr(StrToDate("09.2000")));
end;
← →
Юрий Зотов (2002-02-27 15:00) [6]Разве ДАТА может быть без дня?
← →
Delph (2002-02-27 15:48) [7]В том и дело, что пользователю хочется ввести только месяц и год, а выбрать из базы надо все строки по полю типа дата, в которых дата сравнивается с введенным значением. А иногда подразумевается, что все строки одного года, и не надо вводить год... Как я понял, надо самому анализировать строку формата и делать функцию преобразования. Может что посоветуете?
← →
Val (2002-02-27 16:05) [8]Но вы-то знаете, что вводит пользователь-месяц, год, др.?
А выбрать из базы данные по указанному месяцу, например, не столь сложно - существуют SQL-функции выделения(дня, месяца, года) из даты.
← →
gek (2002-02-27 16:08) [9]date_beg:=strtodate(datetostr(date_1)+".01));
date_end:=strtodate(datetostr(date_2)+".31));
select * from table_my where date between "date_beg" and "date_end"
← →
Юрий Зотов (2002-02-27 16:14) [10]А зачем вообще какие-то форматы?
Если юзер вводит только месяц и год, значит он фактически вводит ДВЕ даты - то есть ДИАПАЗОН от первого до последнего числа этого месяца этого года. Просто подставляете эти числа и формируете две нормальные даты, а дальше обычный select. Аналогично с месяцем и годом.
Другой вариант - хранить день, месяц и год в трех разных полях, тогда вообще все элементарно - select и больше ничего (то есть, если элемент не введен, то в where он не входит).
← →
Кулюкин Олег (2002-02-27 16:28) [11]Я не нашел готовой подходящей функции.
Анализировал вручную.
Форматы:
все распознаваемые функцией StrToDate
+ дата без числа (форматы m.yy, m.yyyy, mm.yy, mm.yyyy)
+ дата без числа и месяца (yy, yyyy)
+ ВСЕ варианты разделителей даты.
Ничего сложного там нет.
Просто протестировать нужно :)
← →
Кулюкин Олег (2002-02-27 16:33) [12]А можно заставить юзера вводить диапазон.
Хочет посмотреть данные за год - пусть выберет диапазон с 1 января по 31 декабря нужного года.
Наверное это будет правильнее всего.
← →
Delph (2002-02-27 16:36) [13]Всем спасибо большое. Я тут сам придумал примерно следующее:
function StringToDate(Stroka, Format: String): TDateTime;
var
D, M, G: String;
i: Integer;
begin
D := "";
M := "";
G := "";
Format := UpperCase(Format);
for i := 1 to Length(Format) do
begin
if Format[i] = "D" then D := D + Stroka[i];
if Format[i] = "M" then M := M + Stroka[i];
if Format[i] = "Y" then G := G + Stroka[i];
end;
if D = "" then D := "1";
if M = "" then M := "1";
if G = "" then G := GetGodNow;
Result := EncodeDate(StrToInt(G), StrToInt(M), StrToInt(D));
end;
function GetGodNow: String;
var
Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
Result := IntToStr(Year);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(DateToStr(StringToDate(Edit1.Text, "mm.yyyy")));
end;
осталось только исключений не допустить :)
← →
Val (2002-02-27 16:44) [14]Диапазонами, думаю, удобнее всего, тем более mm.yyyy, разве не диапазон? :) А выбирать удобнее с помощью TDateTimePicker"ов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c