2012-02-29 21 views
22

Bir dize, datetime.strptime(date_string, format) datetime alma işlevi, ikinci argüman olarak bir dize biçimi gerektirir. Tam formatı bilmeden bir dizeden bir tarih oluşturmak için bir yol var mı ve Python en iyi tahmin mi?datetime, en iyi tahmin edilen dize biçimi

+1

olası yinelenen http://stackoverflow.com/questions/1495487/is-there-any-python-library-for -parsing-date-and-times-a-natural-language) –

+4

mm/gg/yyyy ile gg/aa/yyyy arasındaki fark, yanlış anladığınızda felaketle sonuçlanan ilginç bir sorundur. –

+0

"Tam biçim olmadan" dediğinizde ne kadar kusursuz olacağınıza bağlıdır. İşleyebilmek için kullanacağınız giriş türlerinden örnekler verebilir misiniz? Ya da, biçim hakkında kısmi bilgi sahibi olabilir misiniz (yıl 2 veya 4 basamaklı mı, ayın önceki gün mi yoksa tam ters mi)? En azından bazı temel bilgiler olmadan, bir kişi bile sorduğunuz şeyi yapamaz. 01/02/12 1 Şubat 2012, 2 Ocak 2012, 12 Şubat 2001, 2 Aralık, ya da başka bir şey mi? –

cevap

4

Ben python bir adam olmadan önce, ben bir perl adamdım. Her zaman özlediğim ama ona yakın bir şey görmediğim şeylerden biri Date::Manip. Bu modül, nibblesin kırılmasından iyi bir zaman damgası çıkarabilir. Neredeyse yazarın Şeytan'la bir anlaşma yaptığını sanıyorum.

Python içinde ona kesmelerine almak birkaç şey arasında karşılaştık:

Eğer daha iyi bir şey bulmak olsa da bunu duymak isterim.

+0

Öneriler için teşekkürler - Cevabımı görün, [dateutil] (http://pypi.python.org/pypi/python-dateutil/1.5) kütüphanesi ile kendi yanıtımı bulduğumu düşünüyorum. – Yarin

8

Yalnızca tarihlere karşı denetleniyorsa, basit bir işlevden kurtulabilir.

def get_date(s_date): 
    date_patterns = ["%d-%m-%Y", "%Y-%m-%d"] 

    for pattern in date_patterns: 
     try: 
      return datetime.datetime.strptime(s_date, pattern).date() 
     except: 
      pass 

    print "Date is not in expected format: %s" %(s_date) 
    sys.exit(0) 
[doğal dilden tarihleri ​​ve saatleri ayrıştırmak için herhangi piton kütüphane var?] (Içinde
+0

Tarih formatınızın kapsanması koşuluyla dateutil'i kullanmadan çok daha hızlıdır. – rbennell