Использование формата Unicode для Python `time.strftime()`

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

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

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

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

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

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

Ответ 1

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

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')

Ответ 2

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

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

Ответ 3

Вы должны прочитать из файла как Unicode, а затем преобразовать его в формат Date-time.

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"

Или вы можете использовать следующий путь (для удовлетворения% f):

Log_DateTime = Log_DateTime + '.000000'

Если у вас есть нераспознанный символ (символ Юникода), вы также должны удалить его.

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

В конце вы должны преобразовать строку date-time в реальный формат даты-времени:

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