100 votes

<div> datetime: Arrondi / couper le nombre de chiffres dans les microsecondes </div>

Actuellement, je consigne des informations et j'utilise mon propre formateur avec une formatTime() personnalisée :

def formatTime(self, _record, _datefmt):
    t = datetime.datetime.now()
    return t.strftime('%Y-%m-%d %H:%M:%S.%f')

Mon problème est que les microsecondes, %f, sont six chiffres. Est-il possible de n'afficher que trois chiffres, comme les premiers trois chiffres des microsecondes ?

0voto

gandreoti Points 15

Correction de la solution proposée basée sur les commentaires de Pablojim:

from datetime import datetime

dt = datetime.now()

dt_round_microsec = round(dt.microsecond/1000) #nombre de zéros à arrondir
dt = dt.replace(microsecond=dt_round_microsec)

0voto

Jai K Points 315

Si vous voulez obtenir le jour de la semaine (par exemple, 'dimanche') en plus du résultat, alors en tranchant '[:-3]' ne fonctionnera pas. À ce moment-là, vous pouvez utiliser :

dt = datetime.datetime.now()
print("{}.{:03d} {}".format(dt.strftime('%Y-%m-%d %I:%M:%S'), dt.microsecond//1000, dt.strftime("%A")))

#Sortie: '2019-05-05 03:11:22.211 dimanche'

%H - pour le format 24 heures

%I - pour le format 12 heures

Merci,

0voto

Liam Hoflay Points 1

Ajoutant mes deux cents ici car cette méthode vous permettra d'écrire votre format de microseconde comme vous le feriez pour un flottant en style c. Elle tire avantage du fait qu'ils utilisent tous les deux %f.

import datetime
import re

def format_datetime(date, format):
    """Formater un objet ``datetime`` avec une précision de microseconde.
       Passez votre microseconde comme vous le feriez pour formater un flottant en style c.
       ex "%.3f"

       Args:
            date (datetime.datetime): Vous entrez un objet ``datetime``.
            format (str): Votre chaîne de format strftime.

        Returns:
            str: Votre chaîne de date formatée.
    """
    # Nous devons vérifier si formatted_str contient "%.xf" (x = un nombre) 
    float_format = r"(%\.\d+f)"
    has_float_format = re.search(float_format, format)
    if has_float_format:
        # faire des microsecondes la virgule décimale. Il pourrait y avoir une meilleure façon de le faire
        microseconds = date.microsecond
        while int(microseconds):  # quitter une fois que c'est 0
            microseconds /= 10
        ms_str = has_float_format.group(1) % microseconds
        format = re.sub(float_format, ms_str[2:], format)
    return date.strftime(format)

print(datetime.datetime.now(), "%H:%M:%S.%.3f")
# '17:58:54.424'

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