2017-01-18 17 views
7

Uygulamamda, kendimi stftime stille ve çoğunlukla 2 dizesi biçimini kullanarak buluyorum - ("% d /% m /" % Y ") ve ("% H:% M ")Ortak strftime dizeleri nerede tutulur ("% d /% m /% Y")

Dizgiyi her seferinde yazmak yerine, bu dizeleri bazı global var veya başka bir yerde depolamak istiyorum, böylece biçim dizelerini yalnızca tek bir yerde tanımlayabilirim benim uygulamamda.

Bunu yapmanın pythonik yolu nedir? Küresel bir dict, sınıf, fonksiyon veya başka bir şey kullanmalı mıyım?

Belki böyle mi?

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

Ya da bunun gibi? Eğer formatı tutan bir işlevi oluşturmak için functools.partial kullanabilirsiniz

cevap

1

Django'nun yaptığı gibi kendi ayar modülünüzü oluşturabilirsiniz.

settings.py: Başka yerde

# 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, ...) 

veya

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

sayesinde bir ayarlar dosyasını kullanarak böyle şeyler tutmak için iyi bir merkez yer gibi görünüyor –

6

yardım

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

Teşekkür:

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

sonucu:

18/01/2017 
10:38 

sadece time geçmek zorunda yeni fonksiyona yapı. Fonksiyon formatı tutar.

Not: lambda ile aynı yapabilirsiniz:

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

Ben bunu başarmak için özel bir işlevi oluşturmak için iyi olduğunu düşünüyorum.

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

Numune çalışma: Örneğin: işlev adı açıklayıcı kendini olarak

>>> from datetime import datetime 

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

Çok daha dost dost geliştiriciler için olacaktır. Her zaman datetime'un str'a çevrilmesi gereklidir, hangi işleve ihtiyaç duyulacağını bileceklerdir. Ve formatı uygulama içinden değiştirmek istediğinizde; tek bir değişim noktası olacak.

İlgili konular