Chcę mieć datetime
ciąg od daty z milisekundami. Ten kod jest dla mnie typowy i chętnie nauczę się go skracać.
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
źródło
źródło
Instant.parse
możestrftime('%Y-%m-%dT%H:%M:%S.%fZ')
Odpowiedzi:
Aby uzyskać ciąg daty z milisekundami (3 miejsca po przecinku za sekundami), użyj tego:
Uwaga: w przypadku Python3
print
wymagane są nawiasy:źródło
2013-08-23 10:18:32.926
jest wyjściemprint datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
.import datetime
zamiastfrom datetime import datetime
, będziesz musiał użyć tego:datetime.datetime.utcnow().strftime("%H:%M:%S.%f")
W Pythonie 3.6 możesz używać:
Wynik:
Więcej informacji tutaj: https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat
źródło
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
źródło
[:-3]
na końcu, aby usunąć ostatnie 3 cyfry, tak aby wyświetlały tylko milisekundy.@Cabbi poruszył problem, który w niektórych systemach
%f
może dawać format mikrosekund"0"
, więc po prostu odcięcie ostatnich trzech znaków nie jest przenośne.Poniższy kod starannie formatuje znacznik czasu w milisekundach:
Przykładowe dane wyjściowe:
Aby uzyskać dokładny wynik, jakiego chciał OP, musimy usunąć znaki interpunkcyjne:
Przykładowe dane wyjściowe:
źródło
Prawdopodobnie tak:
źródło
%m
musi być a%M
, ponieważ są to minuty, a nie miesiące.Zakładam, że masz na myśli, że szukasz czegoś, co jest szybsze niż datetime.datetime.strftime () i zasadniczo usuwa znaki inne niż alfa ze znacznika czasu utc.
Twoje podejście jest nieznacznie szybsze i myślę, że możesz jeszcze bardziej przyspieszyć, przecinając strunę:
źródło
wynik
Użycie translate () i metody wycinania w tym samym czasie
translate () ma tę zaletę, że można je wykorzystać w jednej linii
Porównanie czasów na podstawie pierwszego:
źródło
Poradziłem sobie z tym samym problemem ale w moim przypadku ważne było żeby milisekunda była zaokrąglona a nie obcięta
źródło
źródło
źródło
źródło
Problem z
datetime.utcnow()
innymi takimi rozwiązaniami polega na tym, że są powolne.Bardziej wydajne rozwiązanie może wyglądać tak:
Gdzie
prec
byłby3
w twoim przypadku (milisekundy).Funkcja działa do 9 miejsc po przecinku (należy zwrócić uwagę na liczbę
9
w drugim ciągu formatującym).Jeśli chcesz zaokrąglić część ułamkową, sugerowałbym budowanie
"%.9f"
dynamiczne z żądaną liczbą miejsc dziesiętnych.źródło