2010-04-03 35 views
14

Tôi cố gắng để gọi time.strftime() chức năng của Python sử dụng một định dạng chuỗi Unicode:Sử dụng một định dạng Unicode cho `time.strftime Python()`

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

(\u200f là "Right-To-Left Mark" (. RLM))

Tuy nhiên, tôi nhận được một ngoại lệ mà nhân vật RLM không thể được mã hóa thành ascii:

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

tôi đã cố gắng tìm kiếm một sự thay thế b ut không thể tìm thấy một hợp lý. Có một sự thay thế cho chức năng này, hoặc một cách để làm cho nó hoạt động với các ký tự Unicode?

Trả lời

24

Nhiều chức năng thư viện tiêu chuẩn vẫn không hỗ trợ Unicode theo cách mà họ cần. Bạn có thể sử dụng cách giải quyết này:

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

Cảm ơn bạn. Điều này hoạt động độc đáo. –

+1

Hãy nhớ rằng Python 3 sẽ hoạt động khác nhau, xem báo cáo lỗi của tôi (http://bugs.python.org/issue8304). – AndiDog

+1

argh! bit thông tin này là cần thiết bởi hơn một nửa hành tinh (chỉ người dùng python) và nó được tìm thấy ... chỉ ở đây ... tốt đẹp! –

4

Bạn có thể định dạng chuỗi thông qua utf-8 encoding:

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

Cảm ơn bạn. Điều này giống như câu trả lời của @ AndiDog, nhưng kể từ khi anh ta trả lời đầu tiên, tôi sẽ chọn anh ta làm câu trả lời được chấp nhận. –

+0

@ Alex, cảm ơn. Tôi đã sửa nó. – Yaroslav

0

Bạn nên đọc từ tệp dưới dạng Unicode và sau đó chuyển đổi thành định dạng ngày giờ.

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] 

Bạn có thể xác định định dạng ngày theo thời gian như thế này:

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

Nhưng một số ngôn ngữ lập trình như C# không hỗ trợ nó một cách dễ dàng, vì vậy bạn có thể thay đổi nó để:

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

Hoặc bạn có thể sử dụng như sau (để thỏa mãn.% F):

Log_DateTime = Log_DateTime + '.000000' 

Nếu bạn có biểu tượng không được nhận dạng (biểu tượng Unicode) thì bạn cũng nên xóa nó.

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

Cuối cùng, bạn nên chuyển đổi chuỗi ngày thời gian để định dạng ngày-thời gian thực:

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() 
Các vấn đề liên quan