Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Extended tip za datum

[es] :: Pascal / Delphi / Kylix :: Extended tip za datum

[ Pregleda: 2047 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
212.178.227.*



+18 Profil

icon Extended tip za datum17.08.2010. u 10:37 - pre 165 meseci
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
 
Odgovor na temu

nikomak
Nikola Makić
Beograd

Član broj: 177053
Poruke: 65
*.adsl.eunet.rs.



+1 Profil

icon Re: Extended tip za datum17.08.2010. u 13:56 - pre 165 meseci
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

TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
212.178.238.*



+18 Profil

icon Re: Extended tip za datum18.08.2010. u 14:41 - pre 165 meseci
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));
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Extended tip za datum18.08.2010. u 16:20 - pre 165 meseci
> 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.
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
212.178.225.*



+18 Profil

icon Re: Extended tip za datum18.08.2010. u 21:48 - pre 165 meseci
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]
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: Extended tip za datum19.08.2010. u 07:00 - pre 165 meseci
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.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Extended tip za datum19.08.2010. u 09:19 - pre 165 meseci
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;
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Extended tip za datum

[ Pregleda: 2047 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.