Autor Téma: Datum a čas z MySQL na TDateTime  (Přečteno 27454 krát)

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Datum a čas z MySQL na TDateTime
« kdy: 30-07-2014, 11:12:05 »
Ahoj,

potřebuji datum a čas ve tvaru "2014-04-25 13:59:28" převést na TDateTime. Zkoušel jsem použít:
Kód: [Vybrat]
TFormatSettings fs;
TDateTime dt;

GetLocaleFormatSettings(GetUserDefaultLCID(), fs);
fs.DateSeparator = '-';
dt = StrToDateTime(UnicodeString(radek[0]), fs);  //radek[0] obsahuje datum a cas prijaty z DB

Při volání StrToDateTime obdržím vyjímku EConvertError s infirmací, že "2014-04-25 13:59:28" není platné datum a čas. C++ Builder XE5.

hu

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #1 kdy: 30-07-2014, 11:15:39 »
Ne že by nešlo zkonstruovat formát datumu tak, aby ti to StrToDateTime zvládl, ale já osobně se tedy radši držím starého dobrého "rozdělit string na jednotlivé komponenty, ty pomocí StrToInt převést na číslo a následně je pospojovat do TDateTime pomocí EncodeDate+EncodeTime".

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #2 kdy: 30-07-2014, 11:42:45 »
Zdrojový řetězec je *char, realizace tvého postupu vypadá takto:
Kód: [Vybrat]
sscanf(radek[0], "%d%*c%d%*c%d%*c%d%*c%d%*c%d", &rok, &mes, &den, &hod, &min, &sek);
dt = TDateTime(rok, mes, den, hod, min, sek, 0);

Děkuji za pomoc.

hu

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Datum a čas z MySQL na TDateTime
« Odpověď #3 kdy: 30-07-2014, 17:55:26 »
Ne že by nešlo zkonstruovat formát datumu tak, aby ti to StrToDateTime zvládl, ale já osobně se tedy radši držím starého dobrého "rozdělit string na jednotlivé komponenty, ty pomocí StrToInt převést na číslo a následně je pospojovat do TDateTime pomocí EncodeDate+EncodeTime".

Já radši použiji něco na konverzi, kam jde zadat i ten formát dat. Ale jestli to leze z db, tak by to snad mělo vracet rovnou v odpovídajícím typu a ne ve stringu...

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #4 kdy: 30-07-2014, 18:04:57 »
Ale jestli to leze z db, tak by to snad mělo vracet rovnou v odpovídajícím typu a ne ve stringu...
Vždyť píše, že to neleze z databáze, ale z MySQL...

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #5 kdy: 30-07-2014, 18:17:31 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/

hu

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #6 kdy: 30-07-2014, 18:54:32 »
pepak: MySQL není databáze? :o

hu

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3559
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Datum a čas z MySQL na TDateTime
« Odpověď #7 kdy: 30-07-2014, 19:58:52 »
pepak: MySQL není databáze? :o

hu

Já bych do toho zda MySQL je nebo není opravdová DB moc nerýpal, nebo se ještě něco dozvíš :-)
Embarcadero MVP - Czech republic

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Datum a čas z MySQL na TDateTime
« Odpověď #8 kdy: 30-07-2014, 19:59:57 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/

hu

k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Datum a čas z MySQL na TDateTime
« Odpověď #9 kdy: 30-07-2014, 20:00:26 »
pepak: MySQL není databáze? :o

ne, to je jenom Parodie :-)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #10 kdy: 30-07-2014, 20:19:05 »
pepak: MySQL není databáze? :o
ne, to je jenom Parodie :-)
Ja bych to tak prikre nevidel: pote, co do InnoDB dolepili referencni intergritu se to IMHO jako databaze dalo pouzit. Jedine, kde jsem narazil, bylo tusim dostat se ke constraintum v systemovych tabulkach apod. aby se daly evoluovat. Ovsem to byla nejaka verze 4.x, od te doby jsem to nevidel.

Ovsem je otazka, jestli dneska platit za neco takoveho, kdyz existuji lepsi RDBMS a zadarmo

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #11 kdy: 30-07-2014, 20:20:14 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/
k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.
Jine pristupy nejak nerozdejchal

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #12 kdy: 30-07-2014, 21:48:03 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/
k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.
Jine pristupy nejak nerozdejchal

Spíš nerozchodil.

Čo je to také "lepsi RDBMS"?

hu
« Poslední změna: 30-07-2014, 21:50:17 od hlucheucho »

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Datum a čas z MySQL na TDateTime
« Odpověď #13 kdy: 31-07-2014, 13:00:47 »
Spíš nerozchodil.

Čo je to také "lepsi RDBMS"?

hu

Já jich tam moc nepoužíval, dělal jsem většinou na MSSQL a to má alespoň celkem dobré nástroje. Oracle má takové featury, že té bych se radši vyhnul. Jinak mi přišlo, že dost lidí používá třeba Firebird nebo Postrgresql, ale nepoužíval jsem je.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #14 kdy: 31-07-2014, 13:31:41 »
Nemyslím si, že by změna DB přinesla něco pozitivního, takže nebudu plýtvat časem a úsilím.

hu