Ana sayfa » Python’da Time Modülü Nedir? Nasıl Kullanılır?
Python

Python’da Time Modülü Nedir? Nasıl Kullanılır?

time modülü

Python’da Time Modülü

Python programlama dilindeki time modülü ile tarih, zaman, saat gibi kavramlar üzerinde işlemler yapabilirsiniz. Önceki yazılarımda random modülünü anlatırken, modüllerin python programlama dilinde ne anlama geldiğine ve ne denli önemli olduklarına değinmiştim. Bu yazımda ise modül kavramına değinmeden direkt olarak time modülünün bizlere sağladığı kolaylıklara değineceğim. İsterseniz hemen bu modülünün en çok kullanılan fonksiyonlarını incelemeye başlayalım.

Time Modülünün Fonksiyonları

Öncelikle modüllere ait fonksiyonları ve nitelikleri kullanabilmek için time modülünü programımızın içine aktarıyoruz.

import time

Bu işlemi yaptıktan sonra artık fonksiyonlarımızı inceleyeme başlayabiliriz.

gmtime()

Time modülünü ve bu modülün diğer fonksiyonlarını anlayabilmek için ilk olarak “EPOCH” kavramının ne olduğuna değinmemiz gerekiyor. Her işletim sisteminin kendisine başlangıç tarihi olarak kabul ettiği bir sıfır noktası vardır. İşte bu başlangıç tarihine “EPOCH” deniyor. Bilgisayarımız, içinde bulunduğumuz zamanı bu başlangıç tarihinden itibaren geçen saniyeleri hesaplayarak bulur. Bu bilgiler ışığında bilgisayarımızın başlangıç tarihini gmtime() fonksiyonu yardımı ile buluyoruz. Tabii bu fonksiyonumuz sadece bu işe yaramıyor gmtime() fonksiyonun asıl görevi; saniye parametresi alarak tarih hesaplaması yapmaktır. Aşağıdaki örnekleri inceleyelim.

import time
import locale
locale.setlocale(locale.LC_ALL,"turkish")
print(time.gmtime(0))
--- #Çıktı
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.gmtime() fonksiyonunu kullandığımız vakit bize struct_time adında bir nesne döndürür. Bu nesneyi kullanarak spesifik tarih ve saat gibi zaman birimlerine ulaşabiliriz. Kodumuza baktığımız vakit gmtime() fonksiyonuna “0” değerini verdiğimiz görülüyor. Dolayısıyla bu bize bilgisayarımızın “EPOCH” tarihini verecektir. Çıktıya göre bilgisayarımızın başlangıç olarak kabul ettiği tarih 1 Ocak 1970 tarihiymiş. Şuanki tarihi bulmak için gmtime() fonksiyonunu parametsiz olarak kullanıyoruz.

import time
import locale
locale.setlocale(locale.LC_ALL,"turkish")
print(time.gmtime())
--- #Çıktı
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=27, tm_hour=21, tm_min=24, tm_sec=19, tm_wday=3, tm_yday=301, tm_isdst=0)

NOT: Bu fonksiyonu kullandığınız vakit saat kısmı yanlış olabilir.

Örnek kodlarımızda da gördüğünüz gibi struct_time nesnesinin birçok farklı öğesi bulunmakta. Aslında aşağı yukarı bu öğelerin ne anlama geldiği belli oluyor ama hepsini kısa bir açıklamakta fayda görüyorum.

  • tm_year = 4 haneli yılı verir
  • tm_mon = Ayı rakamsal olarak verir (1 – 12)
  • tm_mday = Ayın gününü rakamsal olarak verir (1-31)
  • tm_hour = Saati verir (0-23)
  • tm_min = Dakikayı verir (0-59)
  • tm_sec = Saniyeyi verir ( 0-60)
  • tm_wday = Günü rakamsal olarak verir (0-6, 0 = Pazartesi)
  • tm_yday = Tarihin yıl açısından kaçıncı güne denk geldiğini verir (0-366)
  • tm_isdst = Gündüz, Yaz saati uygulaması ile ilgili bilgi verir (-1,0,1)

localtime()

Time modülünün localtime() fonksiyonu bizlere aynı gmtime() da olduğu gibi bir struct_time nesnesini döndürür. Bu nesnenin nitelikleri bizlere o anki zamanla ilgili bilgiler verir. Yukarıda gmtime() fonksiyonunun saat ile ilgili verdiği çıktının yanlış olduğunu belirtmiştim. O anki zamanla birlikte doğru bir saat çıktısı elde etmek için localtime() fonksiyonunu kullanıyoruz. Şimdi aşağıdaki kodumuzu dikkatle inceleyelim.

import time
import locale
locale.setlocale(locale.LC_ALL,"turkish")

ob = time.localtime()
print(ob.tm_year)
print(ob.tm_mon)
print(ob.tm_mday)
--- #Çıktı
2016
10
28

localtime() metodunun struct_time adında bir nesne döndürdüğünü daha önceden belirtmiştim. Yukarıdaki kodumuzda da ilk önce bu nesneyi ob adlı bir değişkene atadık. Sonra bu ob adlı değişken ile struct_time adlı nesnemizin niteliklerine eriştik. Mesela o anki yıl “tm_year” adlı niteliğin içinde mevcut, ona erişmek için ob.tm_year komutumuzu kullandık. O anki zamanla ilgili birçok veriye bu şekilde ulaşabilirsiniz. Tabii şimdi ben burada nesne, nitelik, sınıf gibi kavramlardan bahsediyorum. Eğer python’da nesneye dayalı programlama(OOP) konusuna vakıf değilseniz, bu dediğim kavramları anlamıyor olabilirsiniz. İster şuanda işlediğimiz konu olsun ister başka bir modül, paket, framework konusu olsun, bunları tam anlamıyla idrak edebilmeniz için öncelikle sizlere python da nesneye dayalı programlamanın prensiplerini öğrenmenizi tavsiye ediyorum. Bu öneriyi de sizlerle paylaşıktan sonra bir diğer fonksiyonumuza geçelim.

time()

Time modülünün time() fonksiyonu epoch olarak belirttiğimiz başlangıç zamanından içinde bulunduğumuz zamana kadar geçen süreyi hesaplar. Verdiği çıktı saniye cinsindendir. Bu sebeple birçok fonksiyonumuza parametre olarak verebiliriz. Fonksiyonun işlevini daha iyi anlayabilmek için aşağıdaki kodlarımızı inceleyelim.

print(time.time())
---#Çıktı
1477603992.8563464

Demekki bilgisayarın başlangıç zamanından şimdiye kadar 1477603992.8563464 saniye geçmiş. Hatırlarsanız gmtime() fonksiyonu saniye cinsinden parametre alıyordu ve bu saniyeye göre hesaplama yapıyordu. Şimdi bu iki bilgiyi birleştirerek aşağıdaki kodumuzu yazalım ve inceleyelim.

print(time.gmtime(time.time()))
--- #Çıktı
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=27, tm_hour=21, tm_min=35, tm_sec=29, tm_wday=3, tm_yday=301, tm_isdst=0)

Bu kodumuzu incelediğimiz zaman time.gmtime() kodunun çıktısı ile time.gmtime(time.time()) kodunun çıktısının aynı olduklarını görebilirsiniz. Tabii bu çıktımızda saat gerçek saatten 2-3 saat ileri veya geri olabilir.

asctime()

Bu fonksiyonumuz ile içinde bulunduğumuz günü, ayı, saati ve yılı string bir ifade şeklinde elde edebiliriz. Ne demek istediğimi aşağıdaki kodumuz açık bir şekilde ifade ediyor.

print(time.asctime())
---#Çıktı
'Thu Sep  1 01:27:06 2016'

Bu çıktıya göre bu yazıyı 2016 yılının Eylül ayının bir Perşembe gününde saat tam olarak 01:27:06’da yazıyorum. Biraz edebi olduğunu kabul ediyorum ama durum bu şekilde. Çıktının sonucunun ingilizce olduğuna şimdilik takılmayın, bu sonuçları türkçe olarak da nasıl elde edeceğimizi bir sonraki fonksiyonumuzda göreceğiz.

Time modülünün asctime() fonksiyonu ile ilgili belirtebileceğimiz bir başka şey ise; parametre olarak bir struct_time nesnesi veya 9 öğeli bir demet(tuple) alabileceğidir. Daha önceden bildiğimiz gibi localtime() fonksiyonu bizlere struct_time nesnesi döndürür. Bu bilgiyi kullanarak gelin bir kod yazalım bakalım çıktısı ne olacak.

print(time.asctime(time.localtime()))
---#Çıktı
Thu Sep  1 01:36:19 2016'

Gördüğümüz gibi aynı çıktıyı verdi. Bu ek bilgiyi de bilmeniz yararınıza olacaktır.

strftime()

Strftime fonksiyonu ile zaman bilgisi içeren karakter dizilerini bazı özel kısaltmalar ile değişikliğe uğratıp elde edebiliyoruz. Tanımın birazcık kafa karıştırıcı olduğunu kabul ediyorum ama örneklere baktığımız zaman fonksiyonumuzun tam olarak ne işe yaradığını kolaylıkla anlayabileceksiniz. Lafı daha fazla uzatmadan hemen örneklere geçelim.

Not: Örnek kodumuzu yazmadan önce tarih ile ilgili çıktıları türkçe almak için locale modülünü aktarıyoruz ve aşağıdaki kodu yazıyoruz.

import locale
locale.setlocale(locale.LC_ALL,”turkish”)
print(time.strftime(“%c”)
---#Çıktı
Prş 01 Eyl 2016 12:52:52 EEST
print(time.strftime(“%a”)
---#Çıktı
Prş
print(time.strftime(“%B”)
---#Çıktı
Eylül

Örneklerde de gördüğünüz gibi strftime fonksiyonuna vermiş olduğumuz çeşitli parametreler ile içinde bulunduğumuz tarihle ilgili spesifik veriler elde edebiliyoruz. Ben burada örnek olması açısından 3 tane kısaltma kullandım, diğer kısaltmalar ise şu şekilde;

%a hafta gününün kısaltılmış adı

%A hafta gününün tam adı

%b ayın kısaltılmış adı

%B ayın tam adı

%c tam tarih, saat ve zaman bilgisi

%d sayı değerli bir karakter dizisi olarak gün

%j belli bir tarihin, yılın kaçıncı gününe denk geldiğini gösteren 1-366 arası bir sayı

%m sayı değerli bir karakter dizisi olarak ay

%U belli bir tarihin yılın kaçıncı haftasına geldiğini gösteren 0-53 arası bir sayı

%y yılın son iki rakamı

%Y yılın dört haneli tam hali

%x tam tarih bilgisi

%X tam saat bilgisi

Bu kısaltmaları kullanarak strftime() fonksiyonunu çok daha kullanışlı hale getirebilirsiniz.

strptime()

Time modülü adlı konumuzun strptime() adlı fonksiyonu ile karakter dizisi şeklinde verilmiş olan bir tarihi strftime() adlı fonksiyonda kullandığımız kısaltmaları kullanarak anlamlı bir şekilde bölebiliriz. Ayrıca bu fonksiyonumuz bizlere struct_time nesnesini döndürür. Can sıkıcı tanım kısmını geçtiğimize göre hemen örneklerimizi inceleyelim.

tarih = "20 6 2003 13:21:54"
print(time.strptime(tarih,"%d %m %Y %X"))
---#Çıktı
time.struct_time(tm_year=2003, tm_mon=6, tm_mday=20, tm_hour=13, tm_min=21, tm_sec=54, tm_wday=4, tm_yday=171, tm_isdst=-1)

Kodumuzdan da gördüğümüz gibi tarih adlı değişkenimizin içindeki verileri, strptime() fonksiyonu ve parametre olarak aldığı çeşitli kısaltmalar yardımı ile bölüp, parçalayıp struct_time adlı nesnemize dönüştürebiliyoruz.

sleep()

Adından da anlaşılacağı üzere sleep() fonksiyonu kodlarımızı belirli bir süre sekteye uğratmaya, bekletmeye yarar. Mesela programımızın içinde bir kod bölümü var ve siz bu bölümün bilgisayarınız tarafından uygulanmasını 3 dakika bekletmek istiyorsunuz, veya bir çıktıyı ekrana belirli saniyelere göre basmak istiyorsunuz. İşte bu gibi durumlarda time modülünün sleep() fonksiyonunu kullanıyoruz. Aşağıdaki örneğimize bakalım.

tarih = "20 6 2003 21:21:54"
ob = time.strptime(tarih,"%d %m %Y %X")
for i in ob:
    time.sleep(1)
    print(i)

Bu kodumuzu kendiniz denediğiniz zaman ekrana çıktıların 1’er saniye ara ile basıldığını görebilirsiniz.

Bonus: Programın Çalışma Süresini Bulmak

Şimdiye kadar time modülü ile ilgili birçok fonksiyon gördük ve bu fonksiyonları örneklerimizde kullandık. Şimdi ise bu fonksiyonlardan time() fonksiyonunu kullanarak yazdığımız bir programımızın başlangıcından sonuna kadar ne kadar sürede çalıştığını bulalım.

import time
import locale
baslangic = time.time()
locale.setlocale(locale.LC_ALL,"turkish")
zamanlar = time.gmtime()
print(time.time())
print(time.gmtime(time.time()))
print(time.localtime())
print(time.asctime())
print(time.strftime("%c"))
print(time.strftime("%a"))
print(time.strftime("%B"))
print(time.strftime("%X"))
tarih = "20 6 2003 21:21:54"
ob = time.strptime(tarih,"%d %m %Y %X")
for i in ob:
    time.sleep(1)
    print(i)
print("Programın çalışma süresi: %s" %(time.time() - baslangic)) //

Bu programın çıktısı bende “Programın çalışma süresi: 9.012243747711182” bu şekilde oldu. Programımızı incelediğimiz zaman, en başta time() fonksiyonunu kullanarak başlangıç zamanını aldık ve bir değişkene atadık. Program bittiğinde ise tekrardan time() fonksiyonunu kullandık ve bitişteki zamanı aldık. Bundan sonra geriye yapılacak tek bir şey kalıyor o da başlangıç ile bitiş zamanı arasındaki farkı almak. İşte böyle basit bir uygulama ile Python’da herhangi bir programın çalışma süresini öğrenebilirsiniz.

Pyhon’da time modülü ile gördüğünüz gibi birçok işlemi çeşitli fonksiyonlar vasıtası ile kolaylıkla halledebiliyoruz. Python’da time modülüne benzer datetime adlı bir modül daha bulunmakta, bu yazımda ona değinmedim çünkü; datetime modülü ile yapabileceğiniz birçok işlemi time modülü ile de yapabilirsiniz. Ayrıca bana time modülü datetime modülünden daha basit ve kullanışlı gelmiştir. İsterseniz datetime modülü ile ilgili detaylı bilgi için istihzanın bu adresini ziyaret edebilirsiniz. Bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Siber güvenlik, linux, programlama ve network gibi bilgisayar bilimlerini kapsayan alanlarda yaptığı çalışmalardan edindiği tecrübeleri, kurucusu olduğu kodputer.com adlı web sitesinde okurlarına sunan ve bundan büyük bir haz duyan Sakarya Üniversitesi Bilgisayar Mühendisliği öğrencisi.

Yorum Ekle

Yorum Yazmak İçin Tıkla