Я ищу функцию для инвертирования любой строки (YYYYMDD
,YY/MM/DD
,YYMMDD
...) созданный функциональным FormatDateTime к дате и времени.
пример
У меня есть строковая дата в формате YYYYMMDD
созданный FormatDateTime
mydatestr:=FormatDateTime('YYYYMMDD',Mydate);
теперь, как я могу преобразовать mydatestr в DateTime
снова?
ОБНОВЛЕНИЕ
эти функции
function StrToDate(const S: string): TDateTime; overload;
function StrToDate(const S: string;
const FormatSettings: TFormatSettings): TDateTime; overload;
function StrToDateTime(const S: string): TDateTime; overload;
function StrToDateTime(const S: string;
const FormatSettings: TFormatSettings): TDateTime; overload;
не поддерживайте передачу строки с форматом для преобразования.
Я выгляжу примерно так
Mydatetime:=InvFormatDatetime('20091225','yyyymmdd');
или
Mydatetime:=InvFormatDatetime('20090108','yyyyddmm');
Это довольно просто с существующим решением, функцией StrToDateFmt в модуле rxDateutil.pas из пакета RX, который можно скачать здесь: http://sourceforge.net/projects/rxlib/
РЕДАКТИРОВАТЬ:
Упомянутая выше функция и StrToDateFmt из rxDateutil.pas делают именно то, что вы ожидаете, преобразуя строку в datetime с использованием указанной строковой маски, код слишком велик для включения, поскольку этот блок также содержит другие функции даты, некоторые из них требуются для преобразования строки на сегодняшний день.
Пример использования:
Result := StrToDateFmtDef('MM/DD/YYYY', '11/11/2011', Now);
Function InvFormatDatetime (Cadena:String; Formato:String) : TDateTime;
Var
PosD, PosM, PosY : Integer;
sD, sM, sY : String;
begin
sd := '0';
sm := '0';
sy := '0';
If Length(Cadena) = Length(Formato) Then
Begin
Formato := UpperCase(Formato);
PosD := Pos('D',Formato);
PosM := Pos('M',Formato);
PosY := Pos('Y',Formato);
sd := Copy(Cadena,PosD,2);
sm := Copy(Cadena,PosM,2);
if Length(Cadena) = 6 then
begin
sy := Copy(Cadena,PosY,2);
if StrToInt(sy) > 50 then
sy := '19'+sy
else
sy := '20'+sy;
end
else
sy := Copy(Cadena,Posy,4);
End;
Result := EncodeDate(StrToInt(sY),
StrToInt(sM),
StrToInt(sD));
End;
привет