powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
16 сообщений из 16, страница 1 из 1
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965680
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж...

Пробовал так, но не получается:

Код: pascal
1.
2.
3.
4.
5.
 var
  DateVal: TDateTime;
begin
  DateVal := VarToDateTime('Wed, 03 Jun 2020 11:29:42 GMT');
  ShowMessage(DateToStr(DateVal));
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965698
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
Код: pascal
1.
if S = 'Wed, 03 Jun 2020 11:29:42 GMT' then Result := '03.06.20 11:29:42';
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965711
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно самому парсить.
Для начала убрать день недели.
Потом получить отдельно дату и время с учетом GMT.
В дате, скорей всего, придется заменить месяц на числовой.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965715
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из рабочего кода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    stFormatSettings : TFormatSettings;

  stFormatSettings.DateSeparator := '.';
....// остальные
  stFormatSettings.ShortDateFormat := 'dd/MM/yyyy';


StrToDate(a,UpdateDate, stFormatSettings);



объяснять нечего, все очевидно.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965720
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun
Собственно сабж...

Пробовал так, но не получается:

Код: pascal
1.
2.
3.
4.
5.
 var
  DateVal: TDateTime;
begin
  DateVal := VarToDateTime('Wed, 03 Jun 2020 11:29:42 GMT');
  ShowMessage(DateToStr(DateVal));



Код: 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.
function RfcTimeToDateTime(const dt_str: string; var onErr: string; blnGMT: boolean = false): TDateTime;
{*
Explanation:
if blnGMT then Result is UNC time else local time
e.g. local time zone: ET = GMT - 5hr = -0500
   strTime = 'Wed, 03 Jan 2001 05:45:00 -0500'
     blnGMT = true  -> FormatDateTime('...', Result) = '03.01.2001 10:45:00'
     blnGMT = false -> FormatDateTime('...', Result) = '03.01.2001 05:45:00'
*}
const
  wd = 'sun#mon#tue#wed#thu#fri#sat';
  Month = 'janfebmaraprmayjunjulaugsepoctnovdec';
var
  s, strTime: string;
  dd, mm, yy, hh, nn, ss: Word;
begin
  result := 0;
  onErr := '';
  if dt_str = '' then
  begin
    onErr := 'Ошибка при конвертировании: нет данных';
    exit;
  end;

  try
    strTime := dt_str;
    s := LowerCase(Copy(strTime, 1, 3));
//  Saturday, 09-Jan-2016 05:31:30 GMT

    if Pos(s, wd) > 0 then
      Delete(strTime, 1, Pos(' ', strTime));

    if Pos('-', strTime) > 0 then
      s := Trim(Copy(strTime, 1, Pos('-', strTime) - 1))// Saturday, 09-Jan-2016 05:31:30 GMT
    else
      s := Trim(Copy(strTime, 1, Pos(' ', strTime))); // Wed, 03 Jan 2001 05:45:00

    Delete(strTime, 1, Length(s) + 1);      //'09-Jan-2016 05:31:30 GMT'    s='09-Jan-2016'
    dd := StrToIntDef(s, 0);

    s := LowerCase(Copy(strTime, 1, 3));    //'05:31:30 GMT'
    Delete(strTime, 1, 4);

    mm := (Pos(s, Month) div 3) + 1;
    s := Copy(strTime, 1, 4);

    Delete(strTime, 1, 5);
    yy := StrToIntDef(s, 0);

    Result := EncodeDate(yy, mm, dd);

    s := strTime[1] + strTime[2];

    hh := StrToIntDef(strTime[1] + strTime[2], 0);
    nn := StrToIntDef(strTime[4] + strTime[5], 0);
    ss := StrToIntDef(strTime[7] + strTime[8], 0);
    Delete(strTime, 1, 9);

    Result := Result + EncodeTime(hh, nn, ss, 0);
    if (CompareText(strTime, 'gmt') <> 0) and blnGMT then
    begin
      hh := StrToIntDef(strTime[2] + strTime[3], 0);
      nn := StrToIntDef(strTime[4] + strTime[5], 0);
      if strTime[1] = '+' then
        Result := Result - EncodeTime(hh, nn, 0, 0)
      else
        Result := Result + EncodeTime(hh, nn, 0, 0);
    end;
    onErr := '';
  except
    on e: exception do
    begin
      result := 0;
      onErr := 'Ошибка при конвертировании [' + dt_str + ']: ' + e.message;
    end;
  end;
end;
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965723
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r
из рабочего кода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    stFormatSettings : TFormatSettings;

  stFormatSettings.DateSeparator := '.';
....// остальные
  stFormatSettings.ShortDateFormat := 'dd/MM/yyyy';


StrToDate(a,UpdateDate, stFormatSettings);



объяснять нечего, все очевидно.


это шутка такая?
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965728
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо самому. См.:

SysUtils.TFormatSettings
SysUtils.StrToDateTime
SysUtils.FormatDateTime

Задать входной формат, распарсить вызовом StrToDateTime, задать выходной формат, сериализовать вызовом FormatDateTime.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965738
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012
Vizit0r
из рабочего кода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    stFormatSettings : TFormatSettings;

  stFormatSettings.DateSeparator := '.';
....// остальные
  stFormatSettings.ShortDateFormat := 'dd/MM/yyyy';


StrToDate(a,UpdateDate, stFormatSettings);



объяснять нечего, все очевидно.


это шутка такая?


можно поинтересоваться, что смешного там можно увидеть?
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965739
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r
sql2012
пропущено...


это шутка такая?


можно поинтересоваться, что смешного там можно увидеть?


Предлагаю опубликовать решение с указанным "рабочим кодом".
Вариант от меня, который решает задачу - см. выше.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965742
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, рабочее решение с тысячами вызовов методов работы со строками, вместо использования пары готовых встроенных методов - это отличное решение. Так и надо.

И да, я не собираюсь за него решать его задачу. Я дал ему даже не наводку, а полуфабрикат, если он не осилит - то это ему минус, а не мне такому плохому, что не разжевал и в рот не положил.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965743
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще автор должен для себя определить, что делать с зоной. На входе у него зона есть, а на выходе нет. Просто отбросить, привести к MSK, привести к текущей зоне? Надо решить заранее. Учтите, зона может и на дату повлиять, иногда самым неприятным образом. Казнить нельзя помиловать.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965756
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r
ну да, рабочее решение с тысячами вызовов методов работы со строками, вместо использования пары готовых встроенных методов - это отличное решение. Так и надо.

И да, я не собираюсь за него решать его задачу. Я дал ему даже не наводку, а полуфабрикат, если он не осилит - то это ему минус, а не мне такому плохому, что не разжевал и в рот не положил.



Не собираешься, потому что не можешь?

StrToDate не принимает 3 параметра, просто не дожевал про StrToDateDef?
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965769
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965774
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А точнее так
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965784
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012
Vizit0r
ну да, рабочее решение с тысячами вызовов методов работы со строками, вместо использования пары готовых встроенных методов - это отличное решение. Так и надо.

И да, я не собираюсь за него решать его задачу. Я дал ему даже не наводку, а полуфабрикат, если он не осилит - то это ему минус, а не мне такому плохому, что не разжевал и в рот не положил.



Не собираешься, потому что не можешь?

StrToDate не принимает 3 параметра, просто не дожевал про StrToDateDef?


а, так бы и сказал.

обрезал от
if not TryStrToDate(a,StealthCfg.UpdateDate, stFormatSettings) then
..

по памяти не скажу, какие там функции принимают TFormatSettings, какие нет. Думал StrToDate тоже берет.
...
Рейтинг: 0 / 0
Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
    #39965820
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.e-iter.net/Knowledge/Indy10/frames.html?frmname=topic&frmfile=StrInternetToDateTime@string.html]http://www.e-iter.net/Knowledge/Indy10/frames.html?frmname=topic&frmfile=StrInternetToDateTime@string.html
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как из строки формата "Wed, 03 Jun 2020 11:29:42 GMT" получить строку "03.06.20 11:29:42"?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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