2017-01-18 4 views
7

Dans mon application, je me trouve en utilisant stftime beaucoup, et la plupart du temps avec 2 formats de chaînes - ("% d /% m/% Y ") et ("% H:% M ")Où tenir des chaînes strftime courantes comme ("% d /% m /% Y")

Au lieu d'écrire la chaîne à chaque fois, je veux stocker ces chaînes dans quelque var global ou quelque chose, donc je peux définir les chaînes de format en un seul endroit dans mon application.

Quelle est la façon pythonique de le faire? Dois-je utiliser un dictionnaire global, une classe, une fonction ou peut-être quelque chose d'autre?

Peut-être que cela?

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

Ou comme ça?

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

Merci pour l'aide

Répondre

1

Vous pouvez créer votre propre module de paramètres, comme le fait 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) 

ailleurs

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

ou

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

Merci, en utilisant un fichier de paramètres ressemble à un bon endroit central pour contenir des trucs comme ça –

6

vous pouvez utiliser functools.partial pour générer une fonction de maintien 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())) 

Résultat:

18/01/2017 
10:38 

Il vous suffit de passer le time structure à la nouvelle fonction. La fonction contient le format.

Note: vous pouvez faire la même chose avec lambda:

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

Je pense qu'il est préférable de créer une fonction personnalisée pour y parvenir. Par exemple:

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

run Exemple:

>>> from datetime import datetime 

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

Il sera beaucoup plus convivial pour les développeurs autres que le nom de la fonction est explicite. Chaque fois que la conversion de datetime en str est nécessaire, ils sauront quelle fonction doit être appelée. Et dans le cas où vous voulez changer le format à travers l'application; il y aura un seul point de changement.