2017-01-18 9 views
7

W mojej aplikacji często używam stftime, a przede wszystkim z formatami 2-strunowymi - ("% d /% m/% Y ") i ("% H:% M ")Gdzie można przechowywać typowe ciągi strftime takie jak ("% d /% m /% Y")

Zamiast zapisywać ciąg za każdym razem, chcę przechowywać te ciągi w jakimś globalnym var lub czymś, więc mogę zdefiniować ciągi formatów tylko w jednym miejscu w mojej aplikacji.

Co to jest pythonic? Czy powinienem używać globalnego dicta, klasy, funkcji, a może czegoś innego?

Może tak?

class TimeFormats(): 
    def __init__(self): 
     self.date = "%d/%m/%Y" 
     self.time = "%H:%M" 

Lubisz to?

def hourFormat(item): 
    return item.strftime("%H:%M") 

Dzięki za pomoc

Odpowiedz

1

Można utworzyć własny moduł ustawień, na przykład django.

settings.py:

# locally customisable values go in here 
DATE_FORMAT = "%d/%m/%Y" 
TIME_FORMAT = "%H:%M" 
# etc. 
# note this is Python code, so it's possible to derive default values by 
# interrogating the external system, rather than just assigning names to constants. 

# you can also define short helper functions in here, though some would 
# insist that they should go in a separate my_utilities.py module. 

# from moinuddin's answer 

def datetime_to_str(datetime_obj): 
    return datetime_obj.strftime(DATE_FORMAT) 

gdzie indziej

from settings import DATE_FORMAT 
... 
time.strftime(DATE_FORMAT, ...) 

lub

import settings 
... 
time.strftime(settings.DATE_FORMAT, ...) 
+0

Dzięki użyciu pliku ustawień wygląda jak dobry centralne miejsce do przechowywania takich rzeczy –

6

można wykorzystać functools.partial wygenerować funkcję trzymania format:

import time,functools 

time_dhm = functools.partial(time.strftime,"%d/%m/%Y") 
time_hm = functools.partial(time.strftime,"%H:%M") 

print(time_dhm(time.localtime())) 
print(time_hm(time.localtime())) 

wynik:

18/01/2017 
10:38 

trzeba tylko zdać time strukturę do nowej funkcji. Funkcja przechowuje format.

Uwaga: można zrobić to samo z lambda:

time_dhm = lambda t : time.strftime("%d/%m/%Y",t) 
3

myślę, że lepiej jest utworzyć niestandardową funkcję, aby to osiągnąć. Na przykład: Run

def datetime_to_str(datetime_obj): 
    return datetime_obj.strftime("%d/%m/%Y") 

Próbka:

>>> from datetime import datetime 

>>> datetime_to_str(datetime(1990, 3, 12)) 
'12/03/1990' 

To będzie o wiele bardziej przyjazny dla kolegów programistów jak nazwa funkcji jest oczywista. Za każdym razem, gdy potrzebna jest konwersja datetime na str, będą wiedzieć, która funkcja jest potrzebna do wywołania. A jeśli chcesz zmienić format przez całą aplikację; będzie pojedynczy punkt zmiany.

Powiązane problemy