Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 2.794 pregleda

Najnovija ↓

Extended tip za datum 17.08.2010. u 11:37 · pre 197 meseci #1
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
Re: Extended tip za datum 17.08.2010. u 14:56 · pre 197 meseci #2
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
Potpis
TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
Re: Extended tip za datum 18.08.2010. u 15:41 · pre 197 meseci #3
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));
Re: Extended tip za datum 18.08.2010. u 17:20 · pre 197 meseci #4
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Extended tip za datum 18.08.2010. u 22:48 · pre 197 meseci
izmenjeno 1 put, poslednji put mish_ns 18.08.2010. u 22:58
  1. mish_ns18.08.2010. u 22:58zapis iz teksta poruke
#5
Super HVALA, to je to...

Cisto sam pitao iz interesovanja...a i deluje mi kao dobro resenje za cuvanje datuma u bazi podataka.
Re: Extended tip za datum 19.08.2010. u 08:00 · pre 197 meseci #6
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.
Potpis
"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
Re: Extended tip za datum 19.08.2010. u 10:19 · pre 197 meseci #7
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;
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme