powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
25 сообщений из 63, страница 2 из 3
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621886
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без СМС и регистрации
Код: pascal
1.
MyDate := JvDateUtil.StrToDateFmt('DDMMYYY', '28032016')
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621896
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд, видел решение, спасибо
JvDateUtil это отдельная библиотека, я так понимаю , ее нет в стандартной поставке d7...
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621898
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Гм... Вопрос не в том, нужен ли там Exception (типизированный или нет) - я указал на то, что вообще нет проверки входных параметров и их длин, и при малейшем прыжке в сторону мы можем получить целый пучек Exception (по меньшей мере - выход за границы массива и ошибку преобразования строки в число).
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621901
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Myp3_u_KКвейд, видел решение, спасибо
JvDateUtil это отдельная библиотека, я так понимаю , ее нет в стандартной поставке d7...

JCL - Jedi Code Library - must have в общем.
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621910
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейдбез СМС и регистрации
Код: pascal
1.
MyDate := JvDateUtil.StrToDateFmt('DDMMYYY', '28032016')


там времени нет , только дата
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39621940
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
иногда бывает скучно
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
program strdate;

{$APPTYPE CONSOLE}

uses
  SysUtils, DateUtils;

resourcestring
  sSDTFNoFmtString  = 'Не задана строка форматирования даты/времени.';
  sSDTFLengthError  = 'Длина исходной строки меньше заданной форматированием.';
  sSDTFCharMismatch = 'Символ %d строки не соответствует формату.';
  sSDTFNonDigitChar = 'Некорректное числовое значение в позиции %d.';

{ Допустимые символы в Fmt:
    Y - год, M - месяц, D - день;
    h - час, m - минута, s - секунда, z - миллисекунда;
    ? - один любой символ, * - всё, кроме цифр.
    Все остальные символы означают сами себя. }
function StrToDateTimeFmt(const Str, Fmt: string): TDateTime;
var
  P: PChar;   // текущий символ формата
  L: PChar;   // начало текущего блока
  E: Integer; // позиция ощибки преобразования строки в число
  I: Integer; // индекс текущего поля даты и времени
  S: Integer; // смещение текущего поля в исходной строке относительно формата
  D: array [0..6] of Integer; // значения полей даты и времени
begin
  if Fmt = '' then
    raise EConvertError.CreateRes(@sSDTFNoFmtString);
  if Length(Str) < Length(Fmt) then
    raise EConvertError.CreateRes(@sSDTFLengthError);
  I := 0; // не требуется, но компилятор тупит и ругается на not initialized.
  S := 1; // начинается с 1 для компенсации индексации строк
  P := PChar(Pointer(Fmt));
  L := P;
  FillChar(D, SizeOf(D), $00);
  repeat
    if P^ <> L^ then begin
      case L^ of
        'Y': I := 0;
        'M': I := 1;
        'D': I := 2;
        'h': I := 3;
        'm': I := 4;
        's': I := 5;
        'z': I := 6;
        '*': begin
               I := P - PChar(Pointer(Fmt));
               while not (Str[I + S] in ['0'..'9']) do Inc(S);
               if Length(Str) - S + 1 < Length(Fmt) - (P - L) then
                 raise EConvertError.CreateRes(@sSDTFLengthError);
               L := P;
               Inc(P);
               Continue;
             end;
      else
        if (L^ <> '?') and (Str[L - PChar(Pointer(Fmt)) + S] <> L^) then
          raise EConvertError.CreateResFmt(@sSDTFCharMismatch, [L - PChar(Pointer(Fmt)) + S])
        else begin
          L := P;
          Inc(P);
          Continue;
        end;
      end;
      Val(Copy(Str, L - PChar(Pointer(Fmt)) + S, P - L), D[I], E);
      if E > 0 then
        raise EConvertError.CreateResFmt(@sSDTFNonDigitChar, [L - PChar(Pointer(Fmt)) + E + S - 1]);
      L := P;
    end;
    Inc(P);
  until (P - 1)^ = #0;
  Result := EncodeDateTime(D[0], D[1], D[2], D[3], D[4], D[5], D[6]);
end;

var
  d: TDateTime;
begin
  d := StrToDateTimeFmt('[20150312] <13:10:24.346>', '?YYYYMMDD*mm:hh:ss.zzz>');
  Writeln(FormatDateTime('DD.MM.YYYY hh:mm:ss (zzz)', d));
  ReadLn;
end.

...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622018
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я стесняюсь спросить, а чем не угодила стандартная функция StrToDateTime() в варианте с двумя параметрами?
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622023
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Я стесняюсь спросить, а чем не угодила стандартная функция StrToDateTime() в варианте с двумя параметрами?Тем, что автор может написать свою функцию, с апперкейсом и проверками
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622029
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Я стесняюсь спросить, а чем не угодила стандартная функция StrToDateTime() в варианте с двумя параметрами?
Приходит дата/время в формате "20150312131024" - как это в неё засунуть?
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622039
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, думаю, что только распарсить самому
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622053
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11alekcvp, думаю, что только распарсить самому
Ну тут вот спрашивают, зачем парсить самому если есть стандартная StrToDateTime :)
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622063
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,
хорошее решение!
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622093
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StrToDateTime - не выйдет...

DateSeparator: Char - не задашь пустой
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622111
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем такие огороды городить, когда есть Format ?
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622114
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iзачем такие огороды городить, когда есть Format ?А Format конвертирует сроку в дату?
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622119
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Навскидку, без проверок
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
function TForm7.StrToDateFrmt(const iFormat, iDateStr: string): TDateTime;
var
  AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word;
  aPos: Integer;

  procedure InitVars;
  begin
    AYear := 0;
    AMonth := 0;
    ADay := 0;
    AHour := 0;
    AMinute := 0;
    ASecond := 0;
    AMilliSecond := 0;
  end;

  function GetPart(const iPart: Char): Word;
  var
    aYCnt: Integer;
  begin
    Result := 0;
    aYCnt := 0;

    while (aPos <= High(iFormat)) and (iFormat.Chars[aPos + aYCnt] = iPart) do
      inc(aYCnt);

    Result := StrToInt(iDateStr.Substring(aPos, aYCnt));
    aPos := aPos + aYCnt;
  end;

var
  i: Integer;
begin
  InitVars;
  aPos := 0;

  while aPos <= High(iFormat) do
  begin
    case iFormat.Chars[aPos] of
      'Y':
        AYear := GetPart('Y');
      'M':
        AMonth := GetPart('M');
      'D':
        ADay := GetPart('D');
      'H':
        AHour := GetPart('H');
      'N':
        AMinute := GetPart('N');
      'S':
        ASecond := GetPart('S');
      'Z':
        AMilliSecond := GetPart('Z');
    else
      inc(aPos);
    end;
  end;

  Result := EncodeDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond,
    AMilliSecond);
end;
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622157
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Myp3_u_K,

Ок, упорство в ереси лечится жизнью. Ты делеко не первый :)
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622161
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonMyp3_u_K,

Ок, упорство в ереси лечится жизнью. Ты делеко не первый :)
try walking in my shoes
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622169
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Myp3_u_K,

Давно зарёкся кого-то в чем-то убеждать. Жизнь - лучший доктор.
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622190
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В лазарусе всё корректно отрабатывает:

Код: pascal
1.
dt := ScanDateTime('yyyyddmm', '20132803'); // 28.03.2018
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622191
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonMyp3_u_K,

Давно зарёкся кого-то в чем-то убеждать. Жизнь - лучший доктор.
ок
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622193
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanВ лазарусе всё корректно отрабатывает:

Код: pascal
1.
dt := ScanDateTime('yyyyddmm', '20132803'); // 28.03.2018


в D7 нет такого
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622199
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Myp3_u_KwadmanВ лазарусе всё корректно отрабатывает:

Код: pascal
1.
dt := ScanDateTime('yyyyddmm', '20132803'); // 28.03.2018



в D7 нет такого
Ничего страшного, код совместим и более гибок. То есть поддерживает и AM/PM и даже буквенные месяцы.
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622201
Myp3_u_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanMyp3_u_Kпропущено...

в D7 нет такого
Ничего страшного, код совместим и более гибок. То есть поддерживает и AM/PM и даже буквенные месяцы.
это круто про am pm может пригодится, спасибо
...
Рейтинг: 0 / 0
функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
    #39622233
_StarikPro_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62asviridenkovпропущено...


Really?Нет, ошибся. Строка будет пустая.
Честно говоря, я сталкивался с поведением когда непроинициализированные локальные стринги метода содержали данные предыдущего вызова...сам в шоке был... разбираться в проблеме не стал - просто обнулил, как обычно это и делал...
Вот такой тебе really.
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / функция которая преобразует строку в datetime ро шаблону без разделителй yyyyymmdd
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]