NEDEN: tarihler nesnedir
Python'da tarihler nesnedir. Bu nedenle, onları manipüle ettiğinizde, nesneleri değil, dizeleri değil, zaman damgalarını veya herhangi bir şeyi manipüle edersiniz.
Python'daki herhangi bir nesnenin İKİ dize temsili vardır:
"Yazdır" tarafından kullanılan düzenli gösterim işlevi kullanılarak alınabilir str()
. Çoğu zaman insan tarafından okunabilen en yaygın biçimdir ve ekranı kolaylaştırmak için kullanılır. Size str(datetime.datetime(2008, 11, 22, 19, 53, 42))
verir '2008-11-22 19:53:42'
.
Nesne doğasını (veri olarak) temsil etmek için kullanılan alternatif gösterim. Bu repr()
işlevi kullanmak olabilir ve geliştirme veya hata ayıklama sırasında ne tür veriler manipüle bilmek bilmek kullanışlıdır. repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
verir 'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
Ne oldu "print" kullanarak tarihi yazdırdığınızda, str()
güzel bir tarih dizesi görebilmek için kullanılır . Ancak yazdırdığınızda mylist
, bir nesne listesi yazdırdınız ve Python kullanarak veri kümesini temsil etmeye çalıştı repr()
.
Nasıl: bununla ne yapmak istiyorsun?
Tarihleri değiştirirken, tarih nesnelerini sonuna kadar kullanmaya devam edin. Binlerce faydalı yöntem var ve Python API'sının çoğu tarihlerin nesne olmasını bekliyor.
Onları görüntülemek istediğinizde, kullanın str()
. Python'da iyi uygulama her şeyi açıkça ortaya koymaktır. Bu nedenle, yazdırma zamanı geldiğinde, kullanarak tarihinizin dize ile temsil edilen halini alın str(date)
.
Son bir şey. Tarihleri yazdırmaya çalıştığınızda yazdırdınız mylist
. Bir tarih yazdırmak istiyorsanız, tarih nesnelerini kapsayıcılarına (liste) yazdırmamalısınız.
EG, bir listedeki tüm tarihi yazdırmak istiyorsunuz:
for date in mylist :
print str(date)
O Not bu özel durumda , hatta atlayabilirsiniz str()
baskı sizin için kullanacağız çünkü. Ama bu bir alışkanlık olmamalı :-)
Pratik durum, kodunuzu kullanarak
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Gelişmiş tarih biçimlendirme
Tarihlerin varsayılan bir temsili vardır, ancak bunları belirli bir biçimde yazdırmak isteyebilirsiniz. Bu durumda, strftime()
yöntemi kullanarak özel bir dize temsili alabilirsiniz .
strftime()
tarihinizi nasıl biçimlendirmek istediğinizi açıklayan bir dize deseni bekler.
ÖRNEĞİN :
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Bir "%"
temsilciden sonraki tüm harf , bir şeyin biçimini temsil eder:
%d
gün numarası
%m
ay numarası
%b
ayın kısaltması
%y
son iki basamaklı yıl
%Y
bütün yıl
vb
Resmi belgelere veya McCutchen'in hepsini bilmediğiniz hızlı referansına bir göz atın .
PEP3101'den beri her nesnenin, herhangi bir dizenin yöntem biçimi tarafından otomatik olarak kullanılan kendi biçimi olabilir. Tarih-saat durumunda, biçim strftime ile aynıdır. Böylece yukarıdaki gibi aynı şeyi yapabilirsiniz:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
Bu formun avantajı, aynı anda diğer nesneleri de dönüştürebilmenizdir. Biçimlendirilmiş dize değişmezlerinin
tanıtılmasıyla (Python 3.6, 2016-12-23'ten beri) bu şekilde yazılabilir
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
yerelleştirme
Tarihler, doğru şekilde kullanırsanız yerel dile ve kültüre otomatik olarak uyum sağlayabilir, ancak biraz karmaşıktır. Belki SO (Stack Overflow) ;-) hakkında başka bir soru için
str()
bu sadece budur çünkü, (listenin her bir elemanına)print
örtülü olarak solo yaptıklarıtoday
nesne.