Sana va vaqt (Date and Time)
Sana va vaqt
<ctime> kutubxonasi sanalar va vaqtlar bilan ishlash imkonini beradi.
Undan foydalanish uchun <ctime> sarlavha faylini import qiling:
MISOL
#include <ctime> // ctime kutubxonasini import qilishJoriy sana va vaqtni ko'rsatish
<ctime> kutubxonasida sanalar va vaqtlarni o'lchash uchun turli funksiyalar mavjud.
time() funksiyasi joriy sana va vaqtni ifodalovchi vaqt belgisi (timestamp) beradi. ctime() funksiyasi vaqt belgisi ifodalagan sana va vaqtni ko'rsatish uchun ishlatiladi:
MISOL
// Joriy sana va vaqt uchun vaqt belgisini olish
time_t timestamp;
time(×tamp);
// Vaqt belgisi ifodalagan sana va vaqtni ko'rsatish
cout << ctime(×tamp);TIME() FUNKSIYASINI ISHLATISHNING IKKI USULI
time() funksiyasi parametr orqali berilgan xotira manziliga vaqt belgisini yozadi, lekin u vaqt belgisining qiymatini ham qaytaradi.
time() funksiyasini ishlatishning muqobil usuli — NULL ko'rsatkich uzatish va qaytarish qiymatidan foydalanish:
time_t timestamp = time(NULL);Ma'lumot turlari
Sana va vaqtni saqlash uchun ikkita ma'lumot turi ishlatiladi: vaqt belgilari uchun time_t va sana-vaqt tuzilmalari uchun struct tm.
Vaqt belgilari vaqt lahzasini bitta raqam sifatida ifodalaydi, bu kompyuter hisoblashlarini osonlashtiradi.
Sana-vaqt tuzilmalari sana va vaqtning turli komponentlarini a'zolar sifatida ifodalaydi. Quyidagi a'zolarga ega:
tm_sec— daqiqa ichidagi soniyalartm_min— soat ichidagi daqiqalartm_hour— kun ichidagi soat (0 dan 23 gacha)tm_mday— oyning kunitm_mon— oy (0 dan 11 gacha, yanvardan boshlab)tm_year— 1900 yildan beri o'tgan yillar sonitm_wday— hafta kuni (0 dan 6 gacha, yakshanba bilan boshlab)tm_yday— yilning kuni (0 dan 365 gacha, 0 — yanvar 1)tm_isdst— yozki vaqt amal qilganda musbat, amal qilmaganda nol, noaniq bo'lganda manfiy
ESLATMA
Sana komponentlarining ifodalanishini doimo yodda tuting:
- Soatlar 24 soatlik formatda ifodalanadi. Kechki 11 23 sifatida ifodalanadi.
- Oylar 0 dan 11 gacha. Masalan, dekabr 12 emas, 11 sifatida ifodalanadi.
- Yillar 1900 yilga nisbatan ifodalanadi. 2024 yil 124 sifatida ifodalanadi, chunki 1900 yildan beri 124 yil o'tgan.
Vaqt belgilarini yaratish
time() funksiyasi faqat joriy sana uchun vaqt belgisi yaratishi mumkin, lekin mktime() funksiyasi yordamida ixtiyoriy sana uchun vaqt belgisi yaratish mumkin.
mktime() funksiyasi sana-vaqt tuzilmasini vaqt belgisiga aylantiradi:
MISOL
struct tm datetime;
time_t timestamp;
datetime.tm_year = 2023 - 1900; // 1900 yildan beri yillar soni
datetime.tm_mon = 12 - 1; // Yanvardan beri oylar soni
datetime.tm_mday = 17;
datetime.tm_hour = 12;
datetime.tm_min = 30;
datetime.tm_sec = 1;
// Yozgi vaqt belgilanishi kerak
// -1 kompyuterning vaqt mintaqasi sozlamasini ishlatadi
datetime.tm_isdst = -1;
timestamp = mktime(&datetime);
cout << ctime(×tamp);ESLATMA
mktime() funksiyasiga quyidagi a'zolar qiymatga ega bo'lishi kerak: tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec va tm_isdst.
Sana-vaqt tuzilmalarini yaratish
mktime() funksiyasi sana-vaqt tuzilmasining tm_wday va tm_yday a'zolarini to'g'ri qiymatlar bilan to'ldiradi. Masalan, berilgan sananing hafta kunini topish uchun ishlatilishi mumkin:
MISOL
struct tm datetime;
datetime.tm_year = 2023 - 1900;
datetime.tm_mon = 12 - 1;
datetime.tm_mday = 17;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);
string weekdays[] = {"Yakshanba", "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma", "Shanba"};
cout << "Sana " << weekdays[datetime.tm_wday] << " kuniga to'g'ri keladi";localtime() va gmtime() funksiyalari vaqt belgilarini sana-vaqt tuzilmalariga aylantirishi mumkin.
localtime()— kompyuterning vaqt mintaqasidagi vaqtni ifodalovchi tuzilmaga ko'rsatkich qaytaradigmtime()— GMT vaqt mintaqasidagi vaqtni ifodalovchi tuzilmaga ko'rsatkich qaytaradi
MISOL
time_t timestamp = time(×tamp);
struct tm datetime = *localtime(×tamp);
cout << datetime.tm_hour;Sanalarni ko'rsatish
strftime() funksiyasi sanani xohlagan formatda ko'rsatish imkonini beradi:
MISOL
time_t timestamp = time(NULL);
struct tm datetime = *localtime(×tamp);
char output[50];
strftime(output, 50, "%B %e, %Y", &datetime);
cout << output << "\n";
strftime(output, 50, "%I:%M:%S %p", &datetime);
cout << output << "\n";
strftime(output, 50, "%m/%d/%y", &datetime);
cout << output << "\n";
strftime(output, 50, "%a %b %e %H:%M:%S %Y", &datetime);
cout << output << "\n";Foydali format spetsifikatorlari:
| Spetsifikator | Tavsif | Misol |
|---|---|---|
%a | Hafta kunining qisqa ko'rinishi | Fri |
%b | Oy nomining qisqa ko'rinishi | Dec |
%B | Oy nomining to'liq ko'rinishi | December |
%d | Oyning kuni (bosh nol bilan) | 09 |
%H | 24 soatlik soat formati | 14 |
%I | 12 soatlik soat formati | 02 |
%M | Soat ichidagi daqiqalar | 30 |
%p | AM yoki PM | PM |
%S | Daqiqa ichidagi soniyalar | 01 |
%y | 2 raqamli yil | 23 |
%Y | 4 raqamli yil | 2023 |
Vaqtni o'lchash
difftime() funksiyasi ikki turli vaqt belgilari orasida o'tgan soniyalar sonini o'lchaydi:
MISOL
time_t now;
time_t nextyear;
struct tm datetime;
now = time(NULL);
datetime = *localtime(&now);
datetime.tm_year = datetime.tm_year + 1;
datetime.tm_mon = 0;
datetime.tm_mday = 1;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
nextyear = mktime(&datetime);
int diff = difftime(nextyear, now);
cout << diff << " soniya keyingi yilgacha";clock() funksiyasi dastur ishlayotganda qisqa vaqt oraliqlarini o'lchash uchun foydali:
MISOL
clock_t before = clock();
int k = 0;
for(int i = 0; i < 100000; i++) {
k += i;
}
clock_t duration = clock() - before;
cout << "Davomiyligi: " << (float)duration / CLOCKS_PER_SEC << " soniya";ESLATMA
Bo'lishdan oldin qiymatni float yoki double turiga o'tkazganingizga ishonch hosil qiling, aks holda butun songa bo'lish yuz berishi mumkin.
To'liq <ctime> manbasi
<ctime> funksiyalarining to'liq ro'yxati uchun C++ ctime manbasi sahifasiga o'ting.
