Ik wil een datetime
String van de datum met milliseconden. Deze code is typisch voor mij en ik ben enthousiast om te leren hoe ik het moet verkorten.
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
Antwoord 1, Autoriteit 100%
Om een datumstring te krijgen met milliseconden (3 decimalen achter seconden), gebruikt u dit:
from datetime import datetime
print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
>>>> OUTPUT >>>>
2020-05-04 10:18:32.926
Opmerking: voor Python3, print
vereist haakjes:
print(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
Antwoord 2, Autoriteit 22%
Met Python 3.6 U kunt gebruiken:
from datetime import datetime
datetime.utcnow().isoformat(sep=' ', timespec='milliseconds')
Uitgang:
'2019-05-10 09:08:53.155'
Meer info hier: https: //docs.python. org / 3 / bibliotheek / datetime.html # datetime.datetime.isoformat
Antwoord 3, Autoriteit 6%
print datetime.utcnow().strftime('%Y%m%d%H%M%S%f')
http://docs.python.org/library/datetime. html#strftime-strptime-behaviour
Antwoord 4, autoriteit 5%
@Cabbi bracht het probleem ter sprake dat op sommige systemen het microsecondenformaat %f
"0"
kan geven, dus het is niet draagbaar om simpelweg de laatste drie tekens af te hakken .
De volgende code maakt zorgvuldig een tijdstempel op met milliseconden:
from datetime import datetime
(dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.')
dt = "%s.%03d" % (dt, int(micro) / 1000)
print dt
Voorbeelduitvoer:
2016-02-26 04:37:53.133
Om de exacte uitvoer te krijgen die de OP wilde, moeten we leestekens verwijderen:
from datetime import datetime
(dt, micro) = datetime.utcnow().strftime('%Y%m%d%H%M%S.%f').split('.')
dt = "%s%03d" % (dt, int(micro) / 1000)
print dt
Voorbeelduitvoer:
20160226043839901
Antwoord 5, autoriteit 2%
Waarschijnlijk zo:
import datetime
now = datetime.datetime.now()
now.strftime('%Y/%m/%d %H:%M:%S.%f')[:-3]
# [:-3] => Removing the 3 last characters as %f is for microsecs.
Antwoord 6
import datetime
# convert string into date time format.
str_date = '2016-10-06 15:14:54.322989'
d_date = datetime.datetime.strptime(str_date , '%Y-%m-%d %H:%M:%S.%f')
print(d_date)
print(type(d_date)) # check d_date type.
# convert date time to regular format.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
& lt; & lt; & lt; & lt; & lt; & lt; Output & GT; & GT; & GT; & GT; & GT; & GT; & GT;
2016-10-06 15:14:54.322989
<class 'datetime.datetime'>
06 October 2016 03:14:54 PM
2016-10-06 03:14:54 PM
2016-10-06 15:14:54
Antwoord 7
Ik neem aan dat u bedoelt dat u op zoek bent naar iets dat sneller is dan datetime.datetime.strftime (), en het in wezen de niet-alfa-tekens uit een UTC-tijdstempel uitschakelen.
Je benadering is marginaal sneller, en ik denk dat je dingen nog meer kunt versnellen door de string te snijden:
>>> import timeit
>>> t=timeit.Timer('datetime.utcnow().strftime("%Y%m%d%H%M%S%f")','''
... from datetime import datetime''')
>>> t.timeit(number=10000000)
116.15451288223267
>>> def replaceutc(s):
... return s\
... .replace('-','') \
... .replace(':','') \
... .replace('.','') \
... .replace(' ','') \
... .strip()
...
>>> t=timeit.Timer('replaceutc(str(datetime.datetime.utcnow()))','''
... from __main__ import replaceutc
... import datetime''')
>>> t.timeit(number=10000000)
77.96774983406067
>>> def sliceutc(s):
... return s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
...
>>> t=timeit.Timer('sliceutc(str(datetime.utcnow()))','''
... from __main__ import sliceutc
... from datetime import datetime''')
>>> t.timeit(number=10000000)
62.378515005111694
Antwoord 8
python -c "from datetime import datetime; print str(datetime.now())[:-3]"
2017-02-09 10:06:37.006
Antwoord 9
from datetime import datetime
from time import clock
t = datetime.utcnow()
print 't == %s %s\n\n' % (t,type(t))
n = 100000
te = clock()
for i in xrange(1):
t_stripped = t.strftime('%Y%m%d%H%M%S%f')
print clock()-te
print t_stripped," t.strftime('%Y%m%d%H%M%S%f')"
print
te = clock()
for i in xrange(1):
t_stripped = str(t).replace('-','').replace(':','').replace('.','').replace(' ','')
print clock()-te
print t_stripped," str(t).replace('-','').replace(':','').replace('.','').replace(' ','')"
print
te = clock()
for i in xrange(n):
t_stripped = str(t).translate(None,' -:.')
print clock()-te
print t_stripped," str(t).translate(None,' -:.')"
print
te = clock()
for i in xrange(n):
s = str(t)
t_stripped = s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
print clock()-te
print t_stripped," s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:] "
resultaat
t == 2011-09-28 21:31:45.562000 <type 'datetime.datetime'>
3.33410112179
20110928212155046000 t.strftime('%Y%m%d%H%M%S%f')
1.17067364707
20110928212130453000 str(t).replace('-','').replace(':','').replace('.','').replace(' ','')
0.658806915404
20110928212130453000 str(t).translate(None,' -:.')
0.645189262881
20110928212130453000 s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
Gebruik van Vertaal () en Snijden Werkwijze in dezelfde tijd
Vertalen () presenteert het voordeel om bruikbaar te zijn in één regel
Vergelijking van de tijden op basis van de eerste:
1.000 * T.STRFTIME (‘% Y% M% D% H% m% s% f’)
0.351 * STR (T). REPLAATS (‘-‘, ”). Vervangen (‘:’, ”). Vervangen (‘.’, ”). Vervangen (‘
‘,’ ‘)0.198 * STR (T) .RANSLATE (Geen, ‘- :.’)
0.194 * S [: 4] + S [5: 7] + S [8:10] + S [11:13] + S [14:16] + S [17:19] +
s [20:]
Antwoord 10
Ik heb hetzelfde probleem behandeld, maar in mijn geval was het belangrijk dat de milliseconde afgerond en niet afgekapt
from datetime import datetime, timedelta
def strftime_ms(datetime_obj):
y,m,d,H,M,S = datetime_obj.timetuple()[:6]
ms = timedelta(microseconds = round(datetime_obj.microsecond/1000.0)*1000)
ms_date = datetime(y,m,d,H,M,S) + ms
return ms_date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
Antwoord 11
datetime
t = datetime.datetime.now()
ms = '%s.%i' % (t.strftime('%H:%M:%S'), t.microsecond/1000)
print(ms)
14:44:37.134
Antwoord 12
in Python 3.6 en hoger met behulp van python f-strings :
from datetime import datetime
i = datetime.utcnow()
print(f"""{i:%Y-%m-%d %H:%M:%S}.{"{:03d}".format(i.microsecond // 1000)}""")
De code die specifiek is voor het formatteren Milliseconden is:
{"{:03d}".format(i.microsecond // 1000)}
De opmakende string {:03d}
en microseconde tot milliseconde conversie // 1000
is van def _format_time
in https://github.com/python/cpython/blob/master/lib/datetime.py dat wordt gebruikt voor datetime.datetime.isoformat () .
Antwoord 13
Het probleem met datetime.utcnow()
EN ANDERE DELATE SOLUTATIONS is dat ze traag zijn.
Efficiënte oplossing kan er zo uitzien:
def _timestamp(prec=0):
t = time.time()
s = time.strftime("%H:%M:%S", time.localtime(t))
if prec > 0:
s += ("%.9f" % (t % 1,))[1:2+prec]
return s
Waar prec
zou zijn 3
in uw geval (milliseconden).
De functie werkt maximaal 9 decimalen (gelet op nummer 9
in de 2e formattering-string).
Als u het fractionele gedeelte wilt afronden, raadde ik u aan het bouwen van "%.9f"
dynamisch met gewenst aantal decimalen.
Antwoord 14
Als u bereid bent om de tijd in een variabele op te slaan en een kleine stringmanipulatie uit te voeren, kunt u dit daadwerkelijk doen zonder de Datetime-module te gebruiken.
>>> _now = time.time()
>>> print ("Time : %s.%s\n" % (time.strftime('%x %X',time.localtime(_now)),
... str('%.3f'%_now).split('.')[1])) # Rounds to nearest millisecond
Time : 05/02/21 01:16:58.676
>>>
%.3f rondt af naar de dichtstbijzijnde milliseconde, als u meer of minder precisie wilt, wijzigt u gewoon het aantal decimalen
>>> print ("Time : %s.%s\n" % (time.strftime('%x %X',time.localtime(_now)),
... str('%.1f'%_now).split('.')[1])) # Rounds to nearest tenth of a second
Time : 05/02/21 01:16:58.7
>>>
Getest in Python 2.7 en 3.7 (je moet uiteraard de haakjes weglaten als je print aanroept in versie 2.x).