type - Usando un formato Unicode para `time.strftime()` de Python
type unicode python (3)
Estoy intentando llamar a la función time.strftime()
Python usando una cadena de formato Unicode:
u''%d/u200f/%m/u200f/%Y %H:%M:%S''
( /u200f
es la "Marca de derecha a izquierda" (RLM)).
Sin embargo, estoy recibiendo una excepción de que el carácter RLM no se puede codificar en ascii:
UnicodeEncodeError: el codec ''ascii'' no puede codificar el carácter u ''/ u200f'' en la posición 2: ordinal no está dentro del rango (128)
He intentado buscar una alternativa, pero no pude encontrar una razonable. ¿Existe una alternativa a esta función, o una forma de hacerlo funcionar con caracteres Unicode?
Debe leer un archivo como Unicode y luego convertirlo al formato de fecha y hora.
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]
Puede definir el formato de fecha y hora de esta manera:
fmt = "%Y-%m-%d %H:%M:%S.%f"
Pero algunos lenguajes de programación como C # no lo admiten fácilmente, por lo que puede cambiarlo a:
fmt = "%Y-%m-%d %H:%M:%S"
O puedes usarlo de la siguiente manera (para satisfacer.% F):
Log_DateTime = Log_DateTime + ''.000000''
Si tiene un símbolo no reconocido (un símbolo Unicode), también debe eliminarlo.
# Removing an unrecognized symbol at the first of line (first character)
Log_DateTime = Log_DateTime[1:] + ''.000000''
Al final, debe convertir la fecha y hora de la cadena al formato de fecha y hora real:
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()
Muchas funciones de biblioteca estándar aún no admiten Unicode como deberían. Puede utilizar esta solución:
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'')
Puede formatear la cadena a través de la codificación utf-8:
time.strftime(u''%d/u200f/%m/u200f/%Y %H:%M:%S''.encode(''utf-8''), t).decode(''utf-8'')