C++ Zaman Kütüphanesi
C++ zaman işlemlerini C dilinden devralmıştır. C++ da zaman işlevlerine erişmek için <ctime> kütüphanesini dosyanıza dahil etmelisiniz.
#include <ctime>
C++ da tarih ve saat işlemleri için kullanabileceğiniz 4 farklı tür bulunur. Bunlar clock_t, time_t, size_t ve tm türleridir. clock_t, time_t, size_t türleri sistem zamanını bir tür tam sayı olarak gösterme yeteneğine sahiptir.
tm yapı türü ise zaman bilgisini aşağıdaki öğelere sahip bir C yapısı biçimde tutar.
struct tm {
int tm_sec;<em> // saniye bilgisi 0-61</em>
int tm_min;<em> // dakika bilgisi 0-59</em>
int tm_hour;<em> // saat bilgisi 0-24</em>
int tm_mday;<em> // gün bilgisi (ayın) 1-31</em>
int tm_mon;<em> // ay bilgisi 0-11</em>
int tm_year;<em> // yıl bilgisi 1900</em>
int tm_wday;<em> // gün bilgisi sunday</em>
int tm_yday;<em> // gün bilgisi January 1st</em>
int tm_isdst;<em> // gün ışından yararlanma saat bilgisi</em>
}
C++ zaman işlemleri için en sık kullanılan time(), ctime(), localtime(), clock(), asctime(), gmtime(), mktime(), difftime(), strftime() fonksiyonlarıdır.
Fonksiyonların Kullanım Örnekleri
time()
1 Ocak 1970 tarihinden sonra geçen zamanı saniye cinsinden döndürür. Eğer sistem saati yoksa -1 döndürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
cout<<now<<endl;
return 0;
}
bu kod şuna benzer bir çıktı üretecektir;
1623134894
ctime()
Gün adı ay adı ayın günü saat:dakika:saniye yıl biçiminde bir dizeye bir işaretçi döndürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
char date = *ctime(&now);
cout<<date<<endl; //or cout<<ctime(&now)<<endl;
return 0;
}
bu kod şuna benzer bir çıktı üretir;
Tue Jun 8 09:49:08 2021
localtime()
Yerel saati temsil eden tm yapısına bir işaretçi döndürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *date = localtime(&now);
cout<<date->tm_hour<<":"<<date->tm_min<<":"<<date->tm_sec<<endl;
return 0;
}
yukarıdaki kod şuna benzer bir çıktı üretir;
10:13:24
gmtime()
localtime() fonksiyonuna benzer şekilde evrensel saati temsil eden tm yapısına işaretçi döndürür. Esasen GMT olan Koordineli Evrensel Saati (UTC) temsil eder.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *now_tm = gmtime(&now);
cout<<now_tm->tm_mday<<"/"<<now_tm->tm_mon<<endl;
return 0;
}
yukarıdaki kod şuna benzer bir çıktı üretir;
8/5
clock()
Programın başlatılmasından itibaren geçen saat tik sayısını geri döndürür. Mevcut değilse -1 döndürür. Saniye cinsine dönüştürmek için CLOCKS_PER_SEC değerine bölmek gerekir.
Genellikle kod performansını ölçmek için kullanılır.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
clock_t start_time, end_time;
start_time = clock();
for(int i=0; i<500000; i++) {
cout<<i<<": ";
if(i%2 == 0){
cout<<"çift sayıdır.";
}else{
cout<<"tek sayıdır.";
}
cout<<endl;
}
end_time = clock();
cout<< "İşlem süresi : " << (float)(end_time - start_time) / CLOCKS_PER_SEC << " saniyedir!" <<endl;
return 0;
}
yukarıdaki kodun üreteceği çıktı aşağıdakine benzerdir;
... ... 499997: tek sayıdır. 499998: çift sayıdır. 499999: tek sayıdır. İşlem süresi : 1.48332 saniyedir!
asctime()
asctime() fonksiyonu parametre olarak tm türünde veriyi alır ve daha rahat okunabilir dizeye dönüştürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *time_detay = localtime(&now);
cout<<asctime(time_detay)<<endl;
return 0;
}
aşağıdakine benzer bir çıktı üretir;
Tue Jun 8 11:01:58 2021
mktime()
tm türünde parametre olarak aldığı zamanın saniye değerini döndürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *time_detay;
<em> /* Yerel zaman */</em>
time_detay = localtime(&now);
cout<<"Şu anda : "<<asctime(time_detay)<<endl;
<em> /* 3 ay geri gidiş */</em>
time_detay->tm_mon -= 3;
time_t time_3month = mktime(time_detay);
cout<<"3 Ay önce : "<<ctime(&time_3month)<<endl;
return 0;
}
aşağıdakine benzer bir çıktı üretir;
Şu anda : Tue Jun 8 11:21:37 2021 3 Ay önce : Mon Mar 8 11:21:37 2021
difftime()
Parametre olarak saniye cinsinden 2 değer alır ve arasındaki süreyi saniye cinsinden döndürür.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *time_detay;
time_detay = localtime(&now);
cout<<"Şu anda : "<<asctime(time_detay)<<endl;
<em> /* 3 ay geri gidiş */</em>
time_detay->tm_mon -= 3;
time_t time_3month = mktime(time_detay);
cout<<"3 Ay önce : "<<ctime(&time_3month)<<endl;
int ret = difftime(now, time_3month);
cout<<"Şimdiye kadar "<<ret<<" saniye geçti."<<endl;
return 0;
}
aşağıdakine benzer bir çıktı üretir;
Şu anda : Tue Jun 8 11:30:29 2021 3 Ay önce : Mon Mar 8 11:30:29 2021 Şimdiye kadar 7948800 saniye geçti.
strftime()
tm türündü belirtilen zamanı istenilen formata dönüştürmek için kullanılır.
size_t strftime(char *<em>buf</em>, size_t <em>bufsz</em>, const char *<em>format</em>, const struct tm *<em>tmptr</em>); size_t strftime(char *<em>restrict</em> buf, size_t <em>bufsz</em>, const char *restrict format, const struct tm *restrict tmptr); <sub>(C99)</sub>
buf: Formatlama işleminin içine atılacağı değişken,
bufsz: Formatlama işleminin içine atılacağı değişkenin boyutu,
format: Zamana uygulanacak format (kullanılabilecek değerler aşağıdaki tabloda verilmiştir.)
tmptr: tm türünde zaman bilgisi
#include <iostream>
#include <ctime>
using namespace std;
int main(){
time_t now = time(NULL);
struct tm *now_detay = localtime(&now);
char zaman[100];
strftime(zaman, sizeof(zaman), "%d/%m/%Y %H:%M:%S", now_detay);
cout<<zaman<<endl;
return 0;
}
aşağıdakine benzer bir çıktı üretir;
08/06/2021 11:45:15
Formatlama işleminde kullanabileceğiniz tanımlayıcılar şunlardır;
| Tanımlayıcı | Açıklama | Örnek |
| %a | Hafta gününün kısaltılmış adı | Tue |
| %A | Hafta gününün tam adı | Tuesday |
| %b | Ay adının kısaltılmış hali | Oct |
| %B | Ay adı | October |
| %c | Tarih ve saat bilgisi | Tue Oct 8 11:55:42 2021 |
| %C (C99) | Yıl değerinin 100'e bölümünden kalan değer (0-99) | 21 |
| %d | Ayın gün sayısı (01-31) | 08 |
| %D (C99) | Kısa tarih değeri MM/DD/YY | 10/24/21 |
| %e (C99) | Ayın gün sayısı (1-31) | 8 |
| %F (C99) | Kısa tarih değer YYYY-MM-DD | 2021-10-24 |
| %g (C99) | Haftaya dayalı yıl değeri, son iki rakam (0-99) | 21 |
| %G (C99) | Haftaya dayalı yıl değeri | 2021 |
| %h (C99) | Ay adının kısaltılmış hali | Oct |
| %H | Saat, 24 (00-23) | 15 |
| %I | Saat, 12 (01-12) | 03 |
| %j | Yılın gün sayısı | 245 |
| %m | Ay sayısı (01-12) | 06 |
| %M | Dakika (00-59) | 12 |
| %n (C99) | Yeni satır karakteri ("\n") | |
| %p | AM ya da PM | PM |
| %r (C99) | 12 saatlik saat bildirimi | 11:25:15 AM |
| %R (C99) | 24 saatlik saat bildirimi | 14:30 |
| %S | Saniye (00-61) | 32 |
| %t (C99) | Yatay TAB karakteri ("\t") | |
| %T (C99) | ISO 8601 zaman formatı (HH:MM:SS) | 13:30:00 |
| %u (C99) | ISO 8601 hafta günü sayı olarak (1-7) | 3 |
| %U | Hafta sayısı (0-53) (İlk haftanın birinci günü Pazar) | 40 |
| %V (C99) | ISO 8601 hafta sayısı (01-53) | 41 |
| %w | Haftanın gün sayısı (0-6) (Pazar : 0) | 2 |
| %W | Hafta sayısı (0-53) (İlk haftanın birinci günü Pazartesi) | 41 |
| %x | Tarih bildirimi | 11/20/21 |
| %X | Saat bildirimi | 14:30:23 |
| %y | Yıl son iki rakamı (00-99) | 21 |
| %Y | Yıl | 2021 |
| %z (C99) | ISO 8601 offset değeri UTC'ye göre zaman dilimi | +0000 |
| %Z | Zaman dilimi adı ve ya kısaltması | Türkiye Standart Saati |
| %% | % karakteri | % |
Yazar
Muhammet Şafak
Yazılım Mühendisi & Full-Stack Geliştirici. PHP, Laravel ve modern web teknolojileri üzerine yazıyor.
HakkımdaYorumlar 0
Henüz yorum yapılmamış.
İlk yorumu siz yapın!
Yorum Yaz
Yorumunuz moderasyon sonrası yayınlanacaktır.