2017-01-18 14 views
7

मेरे ऐप में मैं अपने आप को स्टफ्टाइम का उपयोग करके बहुत कुछ ढूंढता हूं, और अधिकांशतः 2 तार प्रारूपों के साथ - ("% d /% m/% वाई ") और ("% एच:% एम ")सामान्य स्ट्रैटाइम स्ट्रिंग्स जैसे कि ""% 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 के प्रत्येक बार रूपांतरण की आवश्यकता होती है, उन्हें पता चलेगा कि कौन से फ़ंक्शन को कॉल करने की आवश्यकता है। और यदि आप आवेदन के माध्यम से प्रारूप को बदलना चाहते हैं; परिवर्तन का एक बिंदु होगा।

संबंधित मुद्दे