19 votes

Utilisation d'un format Unicode pour `time.strftime()` de Python

J'essaie d'appeler la fonction Python time.strftime() à l'aide d'une chaîne de formatage Unicode :

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

( \u200f est la "marque de droite à gauche" (RLM).

Cependant, je reçois une exception indiquant que le caractère RLM ne peut pas être encodé en ascii :

UnicodeEncodeError : le codec 'ascii' ne peut pas encoder le caractère 'u'. \u200f ' en position 2 : ordinal not in range(128)

J'ai essayé de chercher une alternative, mais je n'en ai pas trouvé de raisonnable. Existe-t-il une alternative à cette fonction, ou un moyen de la faire fonctionner avec des caractères Unicode ?

28voto

AndiDog Points 28417

De nombreuses fonctions de la bibliothèque standard ne prennent toujours pas en charge l'Unicode comme elles le devraient. Vous pouvez utiliser cette solution de contournement :

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

4voto

Yaroslav Points 2170

Vous pouvez formater les chaînes de caractères à l'aide de l'encodage utf-8 :

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

0voto

Vous devez lire un fichier au format Unicode, puis le convertir au format Date-Temps.

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]

Vous pouvez définir le format de la date et de l'heure comme suit :

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

Mais certains langages de programmation comme C# ne le supportent pas facilement, vous pouvez donc le changer en :

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

Vous pouvez également utiliser la méthode suivante (pour satisfaire .%f) :

Log_DateTime = Log_DateTime + '.000000'

Si vous avez un symbole non reconnu (un symbole Unicode), vous devez également le supprimer.

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

À la fin, vous devez convertir la chaîne date-temps au format Date-temps réel :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X