time Modülü¶
time
modülü, bir önceki bölümde öğrendiğimiz datetime
modülüne benzer.
Hatta bu iki modülün aynı işi yapan ortak nitelik ve fonksiyonları vardır.
Ancak datetime
modülünden farklı olarak time
modülünü daha çok saatle
ilgili işlemleri yapmak için kullanacağız.
Her zaman olduğu gibi, bu modülü kullanabilmek için de öncelikle modülü içe aktarmamız gerekiyor:
>>> import time
Modülü içe aktardığımıza göre, artık modülün içeriğinden yararlanabiliriz.
gmtime()¶
Python’da (ve başka programlama dillerinde), zaman-tarih hesaplamalarında ‘zamanın başlangıcı’ (EPOCH) diye bir kavram bulunur. ‘Zamanın başlangıcı’, bir işletim sisteminin, tarih hesaplamalarında sıfır noktası olarak aldığı tarihtir. Kullandığınız işletim sisteminin hangi tarihi ‘zamanın başlangıcı’ olarak kabul ettiğini bulmak için şu komutu verebilirsiniz:
>>> time.gmtime(0)
Buradan şu çıktıyı alıyoruz:
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)
Bu, struct_time adlı özel bir veri tipidir. Bu veri tipi içindeki niteliklere şu şekilde ulaşabilirsiniz:
>>> epoch = time.gmtime(0)
>>> epoch.tm_year #yıl
1970
>>> epoch.tm_mon #ay
1
>>> epoch.tm_mday #gün
1
Demek ki zamanın başlangıcı 1 Ocak 1970 tarihi olarak alınıyormuş… İşte bilgisayarımız, içinde bulunduğumuz zaman ve saati, bu başlangıç zamanından bu yana geçen saniyeleri hesaplayarak bulur.
gmtime()
fonksiyonunu parametresiz olarak kullandığınızda, o anda içinde
bulunduğunuz tarih ve saat bilgisini elde edersiniz.
time.struct_time(tm_year=2014, tm_mon=12, tm_mday=10, tm_hour=12, tm_min=5, tm_sec=33, tm_wday=2, tm_yday=344, tm_isdst=0)
Ancak bu çıktı, özellikle saat kısmı konusunda her zaman doğru olmayabilir. Çıktının birkaç saat saptığını görebilirsiniz.
time()¶
time()
fonksiyonu, epok’tan itibaren, o anda içinde bulunduğumuz ana
kadar geçen toplam saniye miktarını verir:
>>> time.time()
1418213083.726988
Elde ettiğiniz bu değeri, gmtime()
fonksiyonunu kullanarak anlamlı bir tarih
değerine dönüştürebilirsiniz:
>>> time.gmtime(time.time())
time.struct_time(tm_year=2014, tm_mon=12, tm_mday=10,
tm_hour=12, tm_min=9, tm_sec=19, tm_wday=2, tm_yday=344,
tm_isdst=0)
Ancak bu çıktı da özellikle saat kısmında sapmalara uğrayabilir.
localtime()¶
Tıpkı gmtime()
fonksiyonundan olduğu gibi, anlık tarih ve zaman bilgisini
bir struct_time nesnesi olarak almak için localtime()
fonksiyonunu da
kullanabiliriz. Bu fonksiyon bize yerel saati doğru bir şekilde verecektir:
>>> time.localtime()
time.struct_time(tm_year=2014, tm_mon=12, tm_mday=10,
tm_hour=14, tm_min=24, tm_sec=21, tm_wday=2, tm_yday=344, tm_isdst=0)
Bu nesnenin içindeki yıl, ay ve gün gibi bilgilere tek tek nasıl erişebileceğinizi biliyorsunuz.
asctime()¶
Başta da söylediğimiz gibi, time
modülü, datetime
modülüne benzer.
Bunların aynı işi gören çeşitli fonksiyonları vardır. Bir örnek verelim.
Hatırlarsanız, bugünün tarihini bir karakter dizisi olarak almak için
datetime
modülünü şu şekilde kullanabiliyorduk:
>>> import datetime
>>> an = datetime.datetime.now()
>>> datetime.datetime.ctime(an)
'Wed Dec 10 13:56:22 2014'
Yukarıdaki işlemi time
modülünün asctime()
fonksiyonunu kullanarak da
yapabiliriz:
>>> import time
>>> time.asctime()
'Wed Dec 10 13:58:31 2014'
asctime()
fonksiyonu tercihe bağlı bir parametre de alabilir. İsterseniz bu
fonksiyona 9 öğeli bir demet veya bir struct_time nesnesi verebilirsiniz.
Yukarıda, gmtime()
fonksiyonunun bir struct_time nesnesi ürettiğini
öğrenmiştik. Dolayısıyla bu nesneyi asctime()
fonksiyonuna parametre olarak
verebilirsiniz:
>>> time.asctime(time.gmtime())
'Wed Dec 10 12:14:29 2014'
>>> time.asctime(time.gmtime(0))
'Thu Jan 1 00:00:00 1970'
Aynı şekilde localtime()
fonksiyonunun da bize bir struct_time() nesnesi
verdiğini biliyoruz. Dolayısıyla bu fonksiyon da asctime()
fonksiyonuna
parametre olarak verilebilir:
>>> time.asctime(time.localtime())
'Wed Dec 10 14:28:05 2014'
Veya, sırasıyla yıl, ay, gün, saat, dakika, saniye, haftanın günü, yılın günü,
gün ışığından yararlanma durumu değerini içeren bir demet de
oluşturabilir, daha sonra bunu asctime()
fonksiyonuna parametre olarak
verebilirsiniz:
>>> demet = (2014, 5, 27, 13, 45, 23, 0, 0, 0)
>>> time.asctime(demet)
Ancak özellikle haftanın günü, yılın günü ve gün ışığından yararlanma durumu bilgilerini doğru tahmin etmek zor olduğu için, bu demeti elle oluşturmanızı pek tavsiye etmem.
strftime()¶
Hatırlarsanız datetime
modülünü anlatırken, datetime sınıfı içindeki
strftime()
adlı bir fonksiyondan söz etmiştik. Bu fonksiyonun, tarih-saat
bilgisi içeren karakter dizilerini manipüle edebilmemizi sağladığını
biliyorsunuz.
Bu fonksiyonu şöyle kullanıyorduk:
>>> import datetime
>>> an = datetime.datetime.now()
>>> datetime.datetime.strftime(an, '%c')
'10.12.2014 14:57:48'
İşte yukarıdaki işlemi, time
modülünün strftime()
fonksiyonunu
kullanarak biraz daha pratik bir şekilde gerçekleştirebiliriz:
>>> import time
>>> time.strftime('%c')
'10.12.2014 14:58:02'
datetime
modülünü incelerken gördüğümüz tarih biçimlendiricileri time
modülü için de geçerlidir:
%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
Uyarı
Sistem yerelinin locale
modülü aracılığıyla Türkçeye ayarlanmış
olması gerektiğini unutmuyoruz:
import locale
locale.setlocale(locale.LC_ALL, 'turkish')
strptime()¶
time
modülünün strptime()
fonksiyonunun yaptığı iş, datetime
modülünün datetime sınıfının strptime()
fonksiyonunun yaptığı işe çok
benzer:
>>> import datetime
>>> t = '27 Mayıs 1980'
>>> tarih = datetime.datetime.strptime(t, '%d %B %Y')
>>> tarih
datetime.datetime(1980, 5, 27, 0, 0)
Burada ‘27 Mayıs 1980’ tarihini, strptime()
fonksiyonu yardımıyla bir
datetime nesnesine dönüştürdük. Aynı şeyi şu şekilde de yapabiliriz:
>>> import time
>>> t = '27 Mayıs 1980'
>>> tarih = time.strptime(t, '%d %B %Y')
>>> tarih
time.struct_time(tm_year=1980, tm_mon=5, tm_mday=27,
tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=148,
tm_isdst=-1)
Gördüğünüz gibi, time
modülünün strptime()
fonksiyonu datetime
modülü içindeki strptime()
fonksiyonunun aksine bir struct_time nesnesi
veriyor.
sleep()¶
sleep()
fonksiyonu, time
modülünün en sık kullanılan araçlarından bir
tanesidir. Bu fonksiyonu kullanarak kodlarımızın işleyişini belli sürelerle
kesintiye uğratabiliriz.
Basit bir örnek verelim:
>>> for i in range(10):
... time.sleep(1)
... print(i)
Bu kodları çalıştırdığınızda, 0’dan 10’a kadar olan sayılar ekrana basılırken her bir sayı arasına 1’er saniyelik duraklamalar eklendiğini göreceksiniz. Eğer arzu ederseniz bu süreyi 1 saniyenin de altına çekebilirsiniz:
>>> for i in range(10):
... time.sleep(0.5)
... print(i)
Gördüğünüz gibi, sleep()
fonksiyonuna 0.5 parametresini vererek, duraklama
süresinin 500 milisaniye olmasını sağladık.
time
modülünün sleep()
fonksiyonunu, kodlarınız arasına duraklama
eklemek istediğiniz her durumda kullanabilirsiniz.
Önemli Not
Sorularınızı yorumlarda dile getirmek yerine Yazbel Forumunda sorarsanız çok daha hızlı cevap alabilirsiniz.Belgelerdeki bir hata veya eksiği dile getirecekseniz lütfen yorumları kullanmak yerine Github'da bir konu (issue) açın.
Eğer yazdığınız yorum içinde kod kullanacaksanız kodlarınızı <pre><code> etiketleri içine alın. Örneğin:
<pre><code class="python"> print("Merhaba Dünya!") </code></pre>