Data i Czas PDF Drukuj Email
Wpisał doctor   
Środa, 14. Marzec 2007 03:29
Data i Czas - klasa TDateTime

Jak przydatna jest znajomośc aktualnego znacznika czasu (ang. Timestamp) nikogo nie trzeba przekonywać.
Przykładowe zastosowanie to sprawdzenie liczby dni pozostałych do wygaśnięcia licencji czy pomiar czasu
wykonania się algorytmu. W tym artykule zajmiemy się możliwościami jakie daja klasa TDateTime.

Metoda Now(), zwraca aktualną datę i czas
np. 2007-03-14 02:40:10

Metoda Time(), zwraca aktualny czas
np. 02:41:17
{viewonly=registered}
Aby wyświetlić znacznik czasu na Labelu czy wpisać do pola Edit należałoby go przekonwertować
z formatu Time na format AnsiString metodą
TimeToStr(TDateTime czas).
To rozwiązanie ma wadę gdy konwertujemy czas zwracany metodą Now(), gdyż gubi się wtedy data a pozostaje tylko czas.
Do konwersji daty na AnsiString używamy metody DateToStr(TDateTime data). Do konwersji znacznika czasu na AnsiString zawierającego
datę i czas należy wykorzystać funkcję DateTimeToStr(TDateTime timestamp).



TDateTime czas = Now();
Label1->Caption = czas;
Edit1->Text = czas;


TDateTime czas = Time();
Label1->Caption = TimeToStr(czas);
Edit1->Text = TimeToStr(czas);



Uzyskanie samej daty - wykorzystujemy metodę CurrentDate().
TDateTime data = TDateTime::CurrentDate();
Edit2->Text = DateToStr(data);
np. 2007-03-14

Uzyskanie daty i czasu - metoda CurrentDateTime().
Uzyskany efekt podobny do Now().
TDateTime data = TDateTime::CurrentDateTime();
Edit2->Text = DateTimeToStr(data);
np. 2007-03-14 02:49:29.

Uzyskanie samego czasu - metoda CurrentTime().
TDateTime data = TDateTime::CurrentTime();
Edit2->Text = TimeToStr(data);
np. 02:51:56.



Uzyskanie numeru dnia tygodnia - metoda DayOfWeek().

TDateTime data = TDateTime::CurrentDateTime();
Edit2->Text = data.DayOfWeek();
Uwaga: pierwszym dniem tygodnia jest niedziela, i tak dla środy zwraca wartość 4.


Dekodowanie daty

Chcąc uzyskać nie całą datę ale np. tylko aktualny miesiąc należy skorzystać z funkcji
void __fastcall DecodeDate(unsigned short* year, unsigned short* month, unsigned short* day).
Funkcja ta oddziela z całego znacznika daty poszczególne składniki, tj. dzień, miesiąc i rok.

TDateTime data = TDateTime::CurrentDateTime();
WORD rok, miesiac, dzien;
data.DecodeDate(&rok, &miesiac, &dzien);
Label1->Caption = rok;
Label2->Caption = miesiac;
Label3->Caption = dzien;

Nawet jeśli chcemy wykorzystać tylko 1 składnik daty, musimy przygotować wskaĽniki do wszystkich elementów daty.

Dekodowanie czasu

Podobnie do dekodowania daty, rozbiciu na składniki podlega znacznik czasu czyli godziny, minuty, sekundy i milisekundy.
Wykorzystujemy funkcję
void __fastcall DecodeTime(unsigned short* hour, unsigned short* min, unsigned short* sec, unsigned short* msec).

TDateTime czas = TDateTime::CurrentDateTime();
WORD godzina, minuta, sekunda, milisekunda;
czas.DecodeTime(&godzina, &minuta, &sekunda, &milisekunda);
Label1->Caption = godzina;
Label2->Caption = minuta;
Label3->Caption = sekunda;
Label4->Caption = milisekunda;// prawidlowy zapis = IntToStr(milisekunda);

Wyjaśnienia wymagają dwie kwestie:
1 - nie jest wymagana konwersja czasu na AnsiString, jedynie IntToStr().
2 - stosuję typ zmiennych WORD (liczba 16 bitowa), jest on równoważny typowi unsigned short według starej konwencji zapisu (patrz dział zmienne).

Inne sposoby konwersji znacznika czasu na AnsiString

TDateTime data = TDateTime::CurrentDateTime();
Edit2->Text = data.DateTimeString();

TDateTime data = TDateTime::CurrentDate();
Edit2->Text = data.DateString();

TDateTime data = TDateTime::CurrentTime();
Edit2->Text = data.TimeString();
{/viewonly}
Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.
erterte  - yrtyrty     |79.163.99.xxx |2009-03-05 16:24:10
Super

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Piątek, 10. Lipiec 2009 13:57
 
 

Losowy obraz

b5.jpg

Gościmy

Naszą witrynę przegląda teraz 11 gości 




| | | |