2012-11-25 12 views
11

Skrobię stronę zawierającą między innymi informacje o dacie. Mam więc zmienną o nazwie warrant_issued, która zawiera u'11/5/2003' - Chcę ją zapisać jako datę możliwą do odczytu maszynowego. PHP ma przydatną funkcję strtotime, która działa bajecznie. Miałam nadzieję, że datetime „s strptime by mi pomóc, ale nie wydaje się być dostępny w mojej wersji datetime - tutaj jest wszystko w mojej karcie zupełny na datetime.Jak działa strtotime w python?

In [231]: datetime. 
datetime.MAXYEAR   datetime.__hash__   datetime.__sizeof__ 
datetime.MINYEAR   datetime.__init__   datetime.__str__ 
datetime.__class__   datetime.__name__   datetime.__subclasshook__ 
datetime.__delattr__  datetime.__new__   datetime.date 
datetime.__dict__   datetime.__package__  datetime.datetime 
datetime.__doc__   datetime.__reduce__  datetime.datetime_CAPI 
datetime.__file__   datetime.__reduce_ex__  datetime.time 
datetime.__format__  datetime.__repr__   datetime.timedelta 
datetime.__getattribute__ datetime.__setattr__  datetime.tzinfo 

Używam ipython 2.7. 2+

Czy szczerzę tu niewłaściwe drzewo? Jaki jest najlepszy sposób na przekształcenie u'11/5/2003' w datę?

Odpowiedz

10

strptime() to zdecydowanie właściwe podejście, jest to po prostu metoda klasy dla datetime class (myląco część modułu datetime).

Oznacza to, datetime.datetime.strptime() jest to, czego szukasz (i nie datetime.strptime()

+1

ale funkcja php strtotime może automatycznie wykryć format string, czy istnieje podobne podejście w Pythonie? –

+1

Biblioteka ['dateutil'] (http://dateutil.readthedocs.io/en/stable/parser.html) może parsować łańcuchy datetime (wnioskowanie o ich formacie). Należy jednak zauważyć, że "11/5/2003" nie jest jednoznacznym formatem (MM/DD lub DD/MM różni się w zależności od ustawień narodowych), więc w tym przypadku należy zachować ostrożność w odniesieniu do dateutil. –

+0

@DavidCain php ostrzega również o tych problemach. Osobiście podoba mi się pozornie magiczna zdolność analizowania łańcuchów daty za pomocą 'strtotime()' w php do poprawnego formatu, ale nie podoba mi się brak specyfiki. – jamescampbell

6

Spróbuj tego:.

Do użytku z datetime module, dokumentacja here

>>>import datetime 
>>>a = u'11/5/2003' 
>>>time1 = datetime.datetime.strptime(a, "%m/%d/%Y") 
>>>print time1 
datetime.datetime(2003, 11, 5, 0, 0) 

W ipython:

In [1]: import datetime 

In [2]: a = u'11/5/2003' 

In [3]: time1 = datetime.datetime.strptime(a, "%m/%d/%Y") 

In [4]: print time1 
2003-11-05 00:00:00 

Korzystanie z time module, dokumentacja here

>>>import time 
>>>a = u'11/5/2003' 
>>>time1 = time.strptime(a, "%m/%d/%Y") 
>>>print time1 
time.struct_time(tm_year=2003, tm_mon=11, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=309, tm_isdst=-1) 
1

Dzięki post Komentarz @David Kaina:

dateutil Biblioteka może analizować ciągi datetime (wywodząc ich formatu). Należy jednak zauważyć, że "11/5/2003" nie jest jednoznacznym formatem (MM/DD lub DD/MM różni się w zależności od ustawień narodowych), więc w tym przypadku należy zachować ostrożność w odniesieniu do dateutil. - Dawid Kain

więc alternatywą Dobrą praktyką jest użycie dateutil Biblioteka:

>>> from dateutil.parser import parse 
>>> dt = parse('2016/12/05 05:18 pm') 
>>> dt 
datetime.datetime(2016, 12, 5, 17, 18) 
>>> dt.timestamp() 
1480929480.0 

>>> parse('16/11/12') 
>>> datetime.datetime(2012, 11, 16, 0, 0)