2010-04-03 62 views
14

我想打電話給使用Unicode格式字符串Python的time.strftime()功能:使用Unicode格式對Python的`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)

我試圖尋找一種備選方案b ut找不到合理的一個。有沒有這種功能的替代方法,或使其與Unicode字符工作的方式?

回答

24

許多標準庫函數仍然不支持Unicode應該的樣子。您可以使用此解決方法:

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

謝謝。這很好地工作。 – 2010-04-03 14:57:53

+1

請注意,Python 3的行爲會有所不同,請參閱我的錯誤報告(http://bugs.python.org/issue8304)。 – AndiDog 2010-04-03 15:10:36

+1

啊!這一點的信息是需要超過半個地球(只有python用戶),它的發現......只是在這裏......很好! – 2011-01-11 15:18:31

4

您可以通過UTF-8編碼格式的字符串:

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

謝謝。這與@ AndiDog的答案相同,但是由於他先回答我會選擇他作爲接受的答案。 – 2010-04-03 15:25:00

+0

@亞歷克斯,謝謝。我修復了它。 – Yaroslav 2010-04-03 17:05:57

0

你應該從一個文件爲Unicode讀出,然後將其轉換爲日期 - 時間格式。

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" 

但一些編程語言如C#不支持它容易,所以你可以把它改成:

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

或者您可以使用下面的方式(以滿足。%f):

Log_DateTime = Log_DateTime + '.000000' 

如果你有一個無法識別的符號(一個Unicode符號),那麼你也應該刪除它。

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