2010-02-23 26 views
19

Próbuję przekonwertować ciąg "20091229050936" na "05:09 29 grudnia 2009 (UTC)"Konwersja ciąg sformatowany ciąg daty i czasu przy użyciu Pythona

>>>import time 
>>>s = time.strptime("20091229050936", "%Y%m%d%H%M%S") 
>>>print s.strftime('%H:%M %d %B %Y (UTC)') 

daje AttributeError: 'time.struct_time' object has no attribute 'strftime'

Najwyraźniej popełniłem błąd: czas jest zły, to obiekt datetime! Ma datę i komponent czasu!

>>>import datetime 
>>>s = datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 

daje AttributeError: 'module' object has no attribute 'strptime'

Jak ja chciałem przekonwertować ciąg na sformatowanej data-string?

Odpowiedz

10

time.strptime zwraca time_struct; time.strftime przyjmuje time_struct jako opcjonalny parametr:

>>>s = time.strptime(page.editTime(), "%Y%m%d%H%M%S") 
>>>print time.strftime('%H:%M %d %B %Y (UTC)', s) 

daje 05:09 29 December 2009 (UTC)

40

Na datetime obiektów strptime jest static method klasy datetime, a nie wolne funkcje w module datetime:

>>> import datetime 
>>> s = datetime.datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 
>>> print s.strftime('%H:%M %d %B %Y (UTC)') 
05:09 29 December 2009 (UTC) 
+1

Pedantyczny punkt: Jest to metoda klasy, a nie metoda statyczna. Różnica polega na tym, że metody klasowe przekazują samą klasę jako argument, a zatem mogą zachowywać się dynamicznie dla podklas; Alternatywne konstruktory (jak 'strptime') są zawsze (lub przynajmniej powinny zawsze) być metodami klasy. – ShadowRanger

1

Dla mnie jest to najlepsze i działa również w Google App Engine, a także

Przykład pokazujący UTC-4

import datetime 
UTC_OFFSET = 4 
local_datetime = datetime.datetime.now() 
print (local_datetime - datetime.timedelta(hours=UTC_OFFSET)).strftime("%Y-%m-%d %H:%M:%S") 
1
from datetime import datetime 
s = datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 
print("{:%H:%M %d %B %Y (UTC)}".format(s)) 
1

Można użyć easy_date zrobić to proste:

import date_converter 
my_datetime = date_converter.string_to_string("20091229050936", "%Y%m%d%H%M%S", "%H:%M %d %B %Y (UTC)")