2010-04-03 12 views
14

मैं पायथन के time.strftime() यूनिकोड प्रारूप स्ट्रिंग का उपयोग समारोह कॉल करने के लिए कोशिश कर रहा हूँ:पायथन के `time.strftime() के लिए एक यूनिकोड प्रारूप का उपयोग`

u'%d\u200f/%m\u200f/%Y %H:%M:%S' 

(\u200f "ठीक-से-बाएं मार्क" है (। RLM))

हालांकि, मैं एक अपवाद हो रही है कि RLM चरित्र ascii में एन्कोड नहीं किया जा सकता है:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 2: ordinal not in range(128)

मैं एक विकल्प ख के लिए खोज की कोशिश की है एक उचित नहीं मिल सका। क्या इस फ़ंक्शन का कोई विकल्प है, या इसे यूनिकोड वर्णों के साथ काम करने का एक तरीका है?

उत्तर

24

कई मानक पुस्तकालय कार्यों अभी भी यूनिकोड वांछित तरह से समर्थन नहीं करते।

fmt = u'%d\u200f/%m\u200f/%Y %H:%M:%S' 
time.strftime(fmt.encode('utf-8'), <your time here>).decode('utf-8') 
+0

धन्यवाद। यह अच्छी तरह से काम करता है। –

+1

ध्यान दें कि पायथन 3 अलग-अलग व्यवहार करेगा, मेरी बग रिपोर्ट देखें (http://bugs.python.org/issue8304)। – AndiDog

+1

argh! आधे ग्रह से अधिक जानकारी के इस बिट की आवश्यकता है (केवल पाइथन उपयोगकर्ता ही) और यह पाया गया है ... बस यहाँ ... अच्छा! –

4

आप UTF-8 एन्कोडिंग के माध्यम से स्ट्रिंग स्वरूपित कर सकते हैं:

time.strftime(u'%d\u200f/%m\u200f/%Y %H:%M:%S'.encode('utf-8'), t).decode('utf-8') 
+0

धन्यवाद। यह @ एंडीडॉग के उत्तर जैसा ही है, लेकिन चूंकि उसने पहले जवाब दिया था, इसलिए मैं उसे स्वीकार किए गए उत्तर के रूप में चुनूंगा। –

+0

@ एलेक्स, धन्यवाद। मैंने इसे ठीक कर दिया है। – Yaroslav

0

आप यूनिकोड के रूप में एक फ़ाइल से पढ़ने और फिर इसे दिनांक समय फ़ॉर्मेट में बदलने चाहिए: आप इस समाधान का उपयोग कर सकते हैं।

from datetime import datetime 

f = open(LogFilePath, 'r', encoding='utf-8') 
# Read first line of log file and remove '\n' from end of it 
Log_DateTime = f.readline()[:-1] 

आप इस तरह की तारीख समय प्रारूप को परिभाषित कर सकते हैं:

fmt = "%Y-%m-%d %H:%M:%S.%f" 

लेकिन जैसे सी # कुछ प्रोग्रामिंग भाषा आसानी से इसका समर्थन नहीं करता है, तो आप इसे करने के लिए बदल सकते हैं:

fmt = "%Y-%m-%d %H:%M:%S" 

या आप निम्न तरीके से उपयोग कर सकते हैं (संतुष्ट करने के लिए।% एफ):

Log_DateTime = Log_DateTime + '.000000' 

यदि आपके पास एक अपरिचित प्रतीक (एक यूनिकोड प्रतीक) है तो आपको इसे भी हटा देना चाहिए।

# Removing an unrecognized symbol at the first of line (first character) 
Log_DateTime = Log_DateTime[1:] + '.000000' 

अंत में, आप वास्तविक तिथि समय प्रारूप करने के लिए स्ट्रिंग तिथि-समय परिवर्तित करना चाहिए:

Log_DateTime = datetime.datetime.strptime(Log_DateTime, fmt) 
Current_Datetime = datetime.datetime.now() # Default format is '%Y-%m-%d %H:%M:%S.%f' 
# Calculate different between that two datetime and do suitable actions 
Current_Log_Diff = (Current_Datetime - Log_DateTime).total_seconds() 
संबंधित मुद्दे