koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da şimdiki saati nasıl gösteririz?

time Modülü

time modülü geçen süreyi bize “saniyeler cinsinden” söyleyen fonksiyonlar sağlar.

import time

Unix Dönem Zamanı

Veritabanına kayıt yapıyorsanız ve zaman damgası ile ilgileniyorsanız kullanmak isteyeceğiniz biçim bu. Tamsayıya dönüştürülebilen basit bir float döndürür. 1 Ocak 1970, 00:00:00’dan bu yana geçen zamanı saniye cinsinden gösterdiği için saniyeler cinsinden aritmetik işlemler için de kullanışlıdır. Az sonra göreceğimiz fonksiyonlara göre de bellek açısından hafiftir:

>>> time.time()
1424233311.771502

Bu yöntem artık-saniyeleri hesaba katmaz, bu nedenle pek doğru değildir. Her ne kadar uluslararası UTC standardına uymasa da, yine de oldukça yakındır ve bu nedenle çoğu kayıt tutma işlemi için kullanışlı olabilir.

Ancak bu yöntem gelecek planlamaları için ideal değildir. Gelecekte belirli bir zamanda gerçekleşmesini istediğiniz bir olay varsa, bu zamanı bir nesnede veya bir dizede depolamak istersiniz. (bunlara az sonra bakacağız)

time.ctime

Şimdiki zamanı işletim sisteminiz tarafından tercih edilen şekilde de gösterebilirsiniz (bu yöntem, sistem tercihlerinizi değiştirdiğinizde gösterimin değişebileceği anlamına gelir, bu nedenle yazacağınız kodun tüm sistemlerde standart olması için buna güvenmeyin). Bu genellikle kullanıcı dostudur, ancak genellikle kronolojik olarak sıralanabilir dizeler oluşturmaz:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Zaman damgalarını da okunabilir forma dönüştürebilirsiniz

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Bu dönüşüm de kayıt tutmak için iyi değildir (yalnızca insanlar tarafından ayrıştırılacak metinlerde belki kullanılabilir).

datetime modülü

datetime modülü oldukça yararlıdır:

>>> import datetime

datetime.datetime.now

geçerli saati döndüren bir fonksiyondur. Saat dilimi bilgisi olmadan kullanılır. Kabukta yankılanan bir gösterime sahiptir, ancak yazdırıldığında (veya bir nesneye zorlandığında), insan tarafından okunabilir biçimdedir ve sözcükbilimsel sıralama kronolojik sıralamaya eşdeğerdir:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetime utcnow

Genel bir standart olan UTC saatinde bir datetime nesnesi alabilirsiniz:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC, GMT saat dilimine neredeyse eşdeğer bir zaman standardıdır. (GMT ve UTC Yaz Saati için değişmese de, kullanıcıları Yaz aylarında İngiliz Yaz Saati gibi diğer saat dilimlerine geçebilir.)

datetime ve saat dilimi

Ancak, şimdiye kadar oluşturduğumuz datetime nesnelerinin hiçbiri kolayca çeşitli saat dilimlerine dönüştürülemez. Bu sorunu pytz modülü ile çözebiliriz:

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Eşdeğer olarak, Python 3’te, nesne zaman dilimini de göz önünde tutan bir utc örneği ekli sınıfa sahibiz

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

Ve orijinal UTC nesnesinden zaman dilimlerine kolayca dönüşebileceğimizi görüyoruz.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

Ayrıca, bir datetime nesnesini timezone yöntemiyle veya tzinfo özniteliğini değiştirerek de yapabilirsiniz. Ancak bunlar son çarelerdir:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

pytz modülü, nesnelerimizin timezone’a farkında hale getirmemize ve zamanları modülde bulunan yüzlerce saat dilimine dönüştürmemizi sağlar.

Bu nesneyi UTC zamanı için görünür bir şekilde seri hale getirebiliriz ve bunu bir veritabanında saklayabiliriz. Ancak bu yöntem görece daha fazla bellek gerektirir. Ayrıca ilk olarak gösterdiğimiz Unix Epoch zamanını depolamaktan çok daha fazla hataya eğilimli olur.

Diğer görüntüleme yolları, özellikle farklı saat dilimlerinden gelebilecek verilerle uğraşırken çok daha hataya eğilimlidir. Bir dizenin veya seri hale getirilmiş datetime nesnesinin hangi saat dilimi için tasarlandığı konusunda bir karışıklık olmasını istemezsiniz.

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top