SORU
22 Kasım 2008, CUMARTESİ


Nasıl tarih yazdırmak için Python düzenli bir biçimde?

Bu benim kod:

import datetime
today = datetime.date.today()
print today

Baskı: istediğim tam olarak 2008-11-22 AMA....Bu ekleme olduğum bir liste var ve sonra aniden her şey gider "". bitkin İşte kod:

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist

Bu aşağıdaki baskılar

[datetime.date(2008, 11, 22)]

Nasıl sadece basit bir randevu alabilir miyim""? 2008-11-22

CEVAP
22 Kasım 2008, CUMARTESİ


NEDEN: tarih nesnelerdir

Python, tarihleri nesnelerdir. Onları işlemek için zaman, bu nedenle, nesneler, dizeleri, zaman damgaları, ne de bir şey değil işlersiniz.

Python ile herhangi bir nesne İKİ dize gösterimler:

  • Normal gösterimi "baskı" olabilir kullanarak str() işlevi tarafından kullanılmıştır. Çoğu zaman en temel insan okunabilir biçimi ve görüntüleme kolaylaştırmak için kullanılır. str(datetime.datetime(2008, 11, 22, 19, 53, 42)) '2008-11-22 19:53:42' verir.

  • Alternatif temsil eden nesne niteliği (bir veri olarak) temsil etmek için kullanılır. repr() işlevini kullanarak ve kullanışlı gelişmekte olan ya da hata ayıklama için başka olabilir. repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) 'datetime.datetime(2008, 11, 22, 19, 53, 42)' verir.

Ne oldu tarih"", güzel bir tarih görebiliyordu, bu yüzden str() kullanılan dize. print baskılı var o zaman Ama basılı olduğunda mylist, nesneleri ve Python listesi veri kümesi, repr() kullanarak temsil etmek için çalıştı basılmış.

Nasıl: sen onunla ne yapmak istersin?

Tarih işlediğinizde, tarihi nesneleri uzun yolu kullanmaya devam ediniz. Yararlı yöntemler binlerce var ve Python API çoğu tarihleri nesneleri olmasını bekliyoruz.

Bunları görüntülemek istediğinizde, sadece str() kullanın. Python, iyi uygulama açıkça her şeyi atmak. Baskı saat, tarih dize gösterimini str(date) kullanarak.

Son bir şey daha. Tarih yazdırmak için çalışırken, mylist basılmış. Eğer bir tarih yazdırmak istiyorsanız, tarihi nesneler, konteyner (liste) print gerekir.

E. G, bir listedeki tüm tarih yazdırmak istiyorum :

for date in mylist :
    print str(date)

Unutmayınbu özel durumdahatta yazdırmak için bunu kullanın çünkü str() atlayabilirsiniz. Ama bir alışkanlık haline gelmemelidir :-)

Pratik durumda, 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

İleri tarih biçimlendirme

Tarih varsayılan gösterimi var, ama belirli bir biçimde bunları yazdırmak isteyebilirsiniz. Bu durumda, özel bir dize gösterimi strftime() yöntemi kullanarak alabilirsiniz.

strftime() dize deseni tarih biçimi için ne kadar istediğini açıklayan bekliyor.

E. G :

print today.strftime('We are the %d, %b %Y')
'We are the 22, Nov 2008'

"%" sonra her harf için bir şey: bir biçimini temsil eder

  • %d gün sayısıdır
  • %m Ay sayısıdır
  • %b Ay kısaltması
  • %y yılın son iki rakamı
  • %Y tüm yıl

vb

35**, hepsini bilemezsin.

PEP3101 çünkü her nesne kendi biçimini otomatik olarak herhangi bir dize yöntem biçimi tarafından kullanılan olabilir. Datetime durumunda, aynı biçimde kullanılır strftime. Böyle yukarıdaki gibi aynı şeyi yapabilirsiniz:

print "We are the {:%d, %b %Y}".format(today)
'We are the 22, Nov 2008'

Bu formun avantajı da aynı zamanda diğer nesneleri dönüştürebilirsiniz.

Yerelleştirme

Tarihleri otomatik olarak eğer bunları doğru şekilde kullanırsanız, yerel dil ve kültür adapte olabilir, ama biraz karışık. Belki de bu YÜZDEN başka bir soru için(Yığın Taşması) ;-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • julioissk84life

    julioissk84l

    18 ŞUBAT 2008
  • MotoManTV

    MotoManTV

    10 Aralık 2009