Eu quero ter uma datetime
string a partir da data em milissegundos. Esse código é típico para mim e estou ansioso para aprender como reduzi-lo.
from datetime import datetime
timeformatted= str(datetime.utcnow())
semiformatted= timeformatted.replace("-","")
almostformatted= semiformatted.replace(":","")
formatted=almostformatted.replace(".","")
withspacegoaway=formatted.replace(" ","")
formattedstripped=withspacegoaway.strip()
print formattedstripped
python
datetime
string-formatting
Jurudocs
fonte
fonte
Instant.parse
podem analisar a representação criada comstrftime('%Y-%m-%dT%H:%M:%S.%fZ')
Respostas:
Para obter uma sequência de datas com milissegundos (3 casas decimais atrás de segundos), use o seguinte:
Nota: Para Python3,
print
requer parênteses:fonte
2013-08-23 10:18:32.926
é a saída deprint datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
.import datetime
invés defrom datetime import datetime
, precisará usar o seguinte:datetime.datetime.utcnow().strftime("%H:%M:%S.%f")
Com o Python 3.6, você pode usar:
Resultado:
Mais informações aqui: https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat
fonte
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
fonte
[:-3]
ao final para soltar os três últimos dígitos para que ele exiba apenas milissegundos.A @Cabbi levantou a questão de que, em alguns sistemas, o formato de microssegundos
%f
pode dar"0"
, por isso não é portátil simplesmente cortar os últimos três caracteres.O código a seguir formata cuidadosamente um carimbo de data / hora com milissegundos:
Saída de exemplo:
Para obter a saída exata que o OP queria, precisamos remover os caracteres de pontuação:
Saída de exemplo:
fonte
Provavelmente assim:
fonte
%m
deve ser um%M
, porque são minutos, não meses.Eu suponho que você quer dizer que você está procurando algo que é mais rápido que datetime.datetime.strftime () e está basicamente retirando os caracteres não-alfa de um timestamp utc.
Sua abordagem é marginalmente mais rápida, e acho que você pode acelerar ainda mais as coisas cortando a corda:
fonte
resultado
O uso do método translate () e slicing executado ao mesmo tempo
translate () apresenta a vantagem de ser utilizável em uma linha
Comparando os tempos com base no primeiro:
fonte
Lidei com o mesmo problema, mas no meu caso, era importante que o milissegundo fosse arredondado e não truncado
fonte
fonte
fonte
fonte
O problema com
datetime.utcnow()
outras soluções é que elas são lentas.Uma solução mais eficiente pode se parecer com esta:
Onde
prec
estaria3
no seu caso (milissegundos).A função funciona com até 9 casas decimais (observe o número
9
na 2ª sequência de formatação).Se você deseja arredondar a parte fracionária, sugiro construir
"%.9f"
dinamicamente com o número desejado de casas decimais.fonte