Обратная функция FormatDateTime

Я ищу функцию для инвертирования любой строки (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');

19
задан dummzeuch 8 April 2019 в 14:31
поделиться

3 ответа

Это довольно просто с существующим решением, функцией StrToDateFmt в модуле rxDateutil.pas из пакета RX, который можно скачать здесь: http://sourceforge.net/projects/rxlib/

РЕДАКТИРОВАТЬ:

Упомянутая выше функция и StrToDateFmt из rxDateutil.pas делают именно то, что вы ожидаете, преобразуя строку в datetime с использованием указанной строковой маски, код слишком велик для включения, поскольку этот блок также содержит другие функции даты, некоторые из них требуются для преобразования строки на сегодняшний день.

Пример использования:

Result := StrToDateFmtDef('MM/DD/YYYY', '11/11/2011', Now);
10
ответ дан 30 November 2019 в 04:29
поделиться
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;

привет

0
ответ дан 30 November 2019 в 04:29
поделиться

Вы проверяли StrToDate и StrToDateTime ?

1
ответ дан 30 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: