2010-04-03 9 views
14

Estoy tratando de llamar a la función de Python time.strftime() utilizando un formato de cadena Unicode:Usando un formato Unicode para `time.strftime de Python()`

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

(\u200f es la "Marca de derecha a izquierda" (. RLM))

sin embargo, yo estoy haciendo una excepción que el carácter RLM no puede ser codificado en ASCII:

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

he tratado de buscar una alternativa b ut no pudo encontrar uno razonable. ¿Hay alguna alternativa a esta función o una forma de hacerlo funcionar con caracteres Unicode?

Respuesta

24

Muchas funciones de la biblioteca estándar todavía no soportan Unicode como deberían. Puede utilizar esta solución:

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

Gracias. Esto funciona bien –

+1

Tenga en cuenta que Python 3 se comportará de manera diferente, consulte mi informe de errores (http://bugs.python.org/issue8304). – AndiDog

+1

argh! esta información es necesaria en más de la mitad del planeta (solo usuarios de Python) y se encuentra ... aquí ... ¡bien! –

4

Puede formatear cadena a través de codificación UTF-8:

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

Gracias. Esto es lo mismo que la respuesta de @AndiDog, pero como respondió primero, elegiré la suya para que sea la respuesta aceptada. –

+0

@Alex, gracias. Lo he arreglado – Yaroslav

0

usted debe leer de 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 como esto:

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

Pero algún lenguaje de programación como C# no lo soporta con facilidad, por lo que puede cambiarlo a:

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

O puede usar de la siguiente manera (para satisfacer.% F):

Log_DateTime = Log_DateTime + '.000000' 

Si tiene un símbolo no reconocido (un símbolo Unicode), entonces debe eliminarlo también.

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

Al final, usted debe convertir la serie fecha-hora 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() 
Cuestiones relacionadas