Kategoriler
C/C++

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;   // saniye bilgisi 0-61
   int tm_min;   // dakika bilgisi 0-59
   int tm_hour;  // saat bilgisi 0-24
   int tm_mday;  // gün bilgisi (ayın) 1-31
   int tm_mon;   // ay bilgisi 0-11
   int tm_year;  // yıl bilgisi 1900
   int tm_wday;  // gün bilgisi sunday
   int tm_yday;  // gün bilgisi January 1st
   int tm_isdst; // gün ışından yararlanma saat bilgisi
}

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;
    /* Yerel zaman */
    time_detay = localtime(&now);
    cout<<"Şu anda : "<<asctime(time_detay)<<endl;
    /* 3 ay geri gidiş */
    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;
    /* 3 ay geri gidiş */
    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 *buf, size_t bufsz, const char *format, const struct tm *tmptr);

size_t strftime(char *restrict buf, size_t bufsz, const char *restrict format, const struct tm *restrict tmptr); (C99)

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
%aHafta gününün kısaltılmış adıTue
%AHafta gününün tam adıTuesday
%bAy adının kısaltılmış haliOct
%BAy adıOctober
%cTarih ve saat bilgisiTue Oct 8 11:55:42 2021
%C (C99)Yıl değerinin 100’e bölümünden kalan değer (0-99)21
%dAyın gün sayısı (01-31)08
%D (C99)Kısa tarih değeri MM/DD/YY10/24/21
%e (C99)Ayın gün sayısı (1-31)8
%F (C99)Kısa tarih değer YYYY-MM-DD2021-10-24
%g (C99)Haftaya dayalı yıl değeri, son iki rakam (0-99)21
%G (C99)Haftaya dayalı yıl değeri2021
%h (C99)Ay adının kısaltılmış haliOct
%HSaat, 24 (00-23)15
%ISaat, 12 (01-12)03
%jYılın gün sayısı245
%mAy sayısı (01-12)06
%MDakika (00-59)12
%n (C99)Yeni satır karakteri (“\n”)
%pAM ya da PMPM
%r (C99)12 saatlik saat bildirimi11:25:15 AM
%R (C99)24 saatlik saat bildirimi14:30
%SSaniye (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
%UHafta sayısı (0-53)
(İlk haftanın birinci günü Pazar)
40
%V (C99)ISO 8601 hafta sayısı (01-53)41
%wHaftanın gün sayısı (0-6)
(Pazar : 0)
2
%WHafta sayısı (0-53)
(İlk haftanın birinci günü Pazartesi)
41
%xTarih bildirimi11/20/21
%XSaat bildirimi14:30:23
%yYıl son iki rakamı (00-99)21
%YYıl2021
%z (C99)ISO 8601 offset değeri UTC’ye göre zaman dilimi+0000
%ZZaman dilimi adı ve ya kısaltmasıTürkiye Standart Saati
%%% karakteri%

Yazar Muhammet ŞAFAK

1992 İstanbul doğumluyum. 2008 yılından beri profesyonel olarak PHP geliştiriyorum. Her ne kadar ağırlıklı olarak PHP üzerinde çalışsam da C, C++, Python, Java programlama dillerini de kullanıyorum.

Bir Cevap Yazın