Autor Téma: Převod datumového řetězce US na na české formátování  (Přečteno 649 krát)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 497
  • Karma: 9
    • Verze Delphi: XE2
Ahoj
Peru se s převodem řetězce ve formátu "Mar 19, 2024 01:46:06 PM"  na klasicke TdateTime  ve 24 hodinovém formátu.
Může někdo poradit jak vyrobit  (najít) funkci pro tento převod.

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 439
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Převod datumového řetězce US na na české formátování
« Odpověď #1 kdy: 20-03-2024, 11:38:02 »
StrToDateTime s tim, ze si pred tim vytvoris promennou typu TFormatSettings, nastavis ji formatovani a pridas ji do funkce
Pak to muzes prevest zpet pres DateTimeToStr(). Pokud budeš chtít nějaký specifický format, opět předáš jako parametr nastavenou proměnnou TFormatSettings

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 497
  • Karma: 9
    • Verze Delphi: XE2
Re:Převod datumového řetězce US na na české formátování
« Odpověď #2 kdy: 20-03-2024, 13:48:37 »
StrToDateTime s tim, ze si pred tim vytvoris promennou typu TFormatSettings, ...

To jsem právě zkoušel , ale nedokaži to dovést ke zdárnému konci .

Offline martinnr

  • Plnoletý
  • ***
  • Příspěvků: 233
  • Karma: 2
    • Verze Delphi: 7,2009,XE7
Re:Převod datumového řetězce US na na české formátování
« Odpověď #3 kdy: 21-03-2024, 08:57:00 »
pouzit "Split" podla medzery a vyskladat z toho potom datum postupne. nie je to moc "pekne" ale funkcne by to malo byt.

Offline chaloup

  • Plnoletý
  • ***
  • Příspěvků: 125
  • Karma: 11
    • Verze Delphi: Delphi 11.3
Re:Převod datumového řetězce US na na české formátování
« Odpověď #4 kdy: 21-03-2024, 15:18:26 »
To jsem právě zkoušel , ale nedokaži to dovést ke zdárnému konci .
Nějakej fragment kódu co jsi zkoušel by byl fajn...?

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 497
  • Karma: 9
    • Verze Delphi: XE2
Re:Převod datumového řetězce US na na české formátování
« Odpověď #5 kdy: 21-03-2024, 17:31:05 »
Nějakej fragment kódu co jsi zkoušel by byl fajn...?

Zatím jsem to opustil a vyřešil jinak.
Tuto hodnotu mi vrací platební terminál v JSON  a vzhledem k tomu že budu muset demo terminál brzo vrátit, jsem to udělal takto":
Při response z terminálu jsem  vygeneroval  časové razítko v delphi (NOW) které používam při tisku stvrzenky a to textové datum
ukládám pouze do logu.

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 439
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Převod datumového řetězce US na na české formátování
« Odpověď #6 kdy: 22-03-2024, 08:32:49 »
Excellent
Rated 1 time
Myslel jsem něco takového:

Kód: Delphi [Vybrat]
  1. procedure Test;
  2. var
  3.   s: string;
  4.   fs: TFormatSettings;
  5.   dt: TDateTime;
  6. begin
  7.   fs := TFormatSettings.Create('en-US');
  8.   fs.ShortDateFormat := 'mmm dd, yyyy';
  9.   s := 'Mar 19, 2024 01:46:06 PM';
  10.   dt := StrToDateTime(s, fs);
  11.   ShowMessage(DateTimeToStr(dt));
  12. end;
  13.  

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 497
  • Karma: 9
    • Verze Delphi: XE2
Re:Převod datumového řetězce US na na české formátování
« Odpověď #7 kdy: 22-03-2024, 09:21:55 »
Myslel jsem něco takového:
procedure Test;
var
  s: string;
  fs: TFormatSettings;
  dt: TDateTime;
Díky vyzkouším .

Doplněno

 dt := StrToDateTime(s, fs);  // Vyhodí to vyjimku
EConvertError  exception message  : ''Mar 19, 2024 01:46:06 PM'' is not a valid date and time.

Možná to že mám jenom XE2
 jak píši, vyřešil jsem to jinak . 

Ale i tak díky za pomoc


« Poslední změna: 22-03-2024, 09:43:56 od Jirka »