[ mish_ns @ 17.08.2010. 10:37 ] @
Pozdrav svima... Cuo sam da Delphi moze da cuva datume i kao extended tip. Tj, vrednost 1 odgovara npr. datumu 1.1.1977. Da li je to tacno posto nisam uspeo da proguglam da se uverim u to? Hvala |
[ mish_ns @ 17.08.2010. 10:37 ] @
[ nikomak @ 17.08.2010. 13:56 ] @
Ovde se izgleda misli na Unix time, odnosno na broj sekundi proteklih od 1.1.1970, a ne 1977.
Unix time je u delphi-u predstavljen kao Int64, a ne kao Extended, a TDateTime je double gde ceo broj predstavlja datum, a decimalni deo vreme. U svakom slucaju Code: ShowMessage(DateToStr(UnixToDateTime(1))); // 1.1.1970 [ mish_ns @ 18.08.2010. 14:41 ] @
Probao sam ovo ali mi Delphi ne prepoznaje UnixToDateTime()
Kad uradim ovo: ShowMessage(DateToStr(1)); dobijem ovaj datum 31.12.1899 :) Danasnji datum je ShowMessage(DateToStr(40408)); [ savkic @ 18.08.2010. 16:20 ] @
> Probao sam ovo ali mi Delphi ne prepoznaje UnixToDateTime()
Moraš ubaciti DateUtils u uses sekciju. > Cuo sam da Delphi moze da cuva datume i kao extended tip. Tj, vrednost 1 odgovara npr. datumu 1.1.1977. > Da li je to tacno posto nisam uspeo da proguglam da se uverim u to Delphi može da čuva datume u bilo kom formatu, s tim što ako ne koristiš default format (TDateTime) i eventualno (TTimeStamp, TSystemTime i TSQLTimeStamp), svu neophodnu podršku moraš sam napisati. Dakle, ako imaš u nekom drugom program unix format datuma, možeš nastaviti da ga čuvaš kao takvog, možeš ga konvertovati u TDateTime ili već po želji. U svakom slučaju objasni detaljnije šta pokušavaš pa će neko moći ponuditi odgovarajuće rešenje. [ mish_ns @ 18.08.2010. 21:48 ] @
Super HVALA, to je to...
Cisto sam pitao iz interesovanja...a i deluje mi kao dobro resenje za cuvanje datuma u bazi podataka. [Ovu poruku je menjao mish_ns dana 18.08.2010. u 22:58 GMT+1] [ rambo @ 19.08.2010. 07:00 ] @
Gotovo svi RDBMS imaju barem DATETIME a neki i DATE, TIME i TIMESTAMP tipove podataka. Kada želiš da u bazi držiš datum i/ili vreme, onda koristiš jedan od ovih tipova. Delphi to automatski prepoznaje i omogućava automatsku konverziju u druge kompatibilne tipove (String, Float, Integer, ...).
Što se Delphija tiče, jedino je TSQLTimeStamp specifičan jer čuva svaki element datuma i vremena posebno (Godine, meseci, dani, i td.). TSQLTimeStamp je veoma moćan tip jer dozvoljava neke manipulacije koje su sa standardnim TDateTime kompleksnije. TDateTime je recimo pogodan za upis u običan fajl (pod uslovom da se čuva kao Extended tip). Čuvanje u String formatu može da bude problematično zbog različitih regionalnih podešavanja na različitim računarima. Što se tiče funkcija koje manipulišu sa TDateTime i ostalim sličnim tipovima, obavezno pogledaj DateUtils unit. Mnogi Delphi programeri kasno saznaju za taj unit, a tamo ima veliki broj pomoćnih funkcija koje mogu da pomognu u gotovo svim situacijama. [ tkaranovic @ 19.08.2010. 09:19 ] @
Da se nadovezem u vezi DateUtils.
UnixToDateTime zna da da razliku od jedne sekunde. Koliko sam video i Indy DateTimeToUnix radi isto. Preciznije je ovo: Code: function UnixToDateTime2(const AValue: Int64): TDateTime; var TimeStamp: TTimeStamp; begin //693594 31.12.1899 broj dana od 01.01.0000 delphi datum //719163 01.01.1970 broj dana od 01.01.0000 unix datum //719163-693594 = UnixDateDelta ili razlika dana delphi - unix TimeStamp.Time := (AValue mod SecsPerDay) * 1000; TimeStamp.Date := (AValue div SecsPerDay) + 719163; Result := TimeStampToDateTime(TimeStamp); end; Može i ovo, umesto DateTimeToUnix, ali nije preciznije: Code: function DateTimeToUnix2(const AValue: TDateTime): Int64; var TimeStamp: TTimeStamp; begin TimeStamp := DateTimeToTimeStamp(AValue); Result := (TimeStamp.Date - 719163)* SecsPerDay+(TimeStamp.Time div 1000); end; Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|