Использование формата Unicode для Python `time.strftime ()` - PullRequest
18 голосов
/ 03 апреля 2010

Я пытаюсь вызвать функцию Python time.strftime(), используя строку формата Unicode:

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

(\u200f - это «Метка справа налево» (RLM).)

Однако я получаю исключение, что символ RLM не может быть закодирован в ascii:

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u200f' в позиции 2: порядковый номер не в диапазоне (128)

Я пытался найти альтернативу, но не смог найти разумную. Есть ли альтернатива этой функции или способ заставить ее работать с символами Юникода?

Ответы [ 3 ]

26 голосов
/ 03 апреля 2010

Многие стандартные функции библиотеки по-прежнему не поддерживают Юникод так, как должны. Вы можете использовать этот обходной путь:

import time
my_format = u'%d\u200f/%m\u200f/%Y %H:%M:%S'
my_time   = time.localtime()
time.strftime(my_format.encode('utf-8'), my_time).decode('utf-8')
4 голосов
/ 03 апреля 2010

Вы можете отформатировать строку в кодировке utf-8:

time.strftime(u'%d\u200f/%m\u200f/%Y %H:%M:%S'.encode('utf-8'), t).decode('utf-8')
0 голосов
/ 23 января 2018

Вы должны прочитать файл как 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...