2017-01-18 10 views
7

В моем приложении я часто использую stftime и в основном с 2 строковыми форматами - ("% d /% m/% Y ") и ("% H:% M ")Где хранить обычные строки strftime, такие как («% d /% m /% Y»)

Вместо того, чтобы писать строку каждый раз, я хочу сохранить эти строки в каком-то глобальном var или что-то в этом роде, поэтому я могу определить строки формата только в одном месте в моем приложении.

Что такое питонический способ сделать это? Должен ли я использовать глобальный dict, класс, функцию или, может быть, что-то еще?

Может быть, так?

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

Или как это?

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

Спасибо за помощь

ответ

1

Вы можете создать свой собственный модуль настроек, например 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) 

других

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

или

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

Спасибо, используя файл настроек выглядит как хорошее центральное место занимать такие вещи, как, что –

6

вы могли бы использовать functools.partial для создания функции проведения формат:

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())) 

результат:

18/01/2017 
10:38 

вы только должны пройти time структуры к новой функции. Функция имеет формат.

Примечание: Вы можете сделать то же самое с lambda:

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

Я думаю, что лучше создать пользовательскую функцию для достижения этой цели. Например:

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

Пример выполнения:

>>> from datetime import datetime 

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

Это будет гораздо более дружественным для разработчиков, поддерживающих имя функции говорит само за себя. Каждый раз, когда требуется преобразование datetime в str, они будут знать, какая функция требуется для вызова. И в случае, если вы хотите изменить формат через приложение; будет единая точка изменения.