2012-03-22 16 views
10
>>> a = str(datetime.now()) 
>>> a 
'2012-03-22 11:16:11.343000' 

Potrzebuję uzyskać ciąg taki jak: '16:11.34'.Jak uzyskać min, sekundy i milisekundy z datetime.now() w python?

Powinien być tak zwarty, jak to możliwe.

Czy zamiast tego powinienem użyć czasu()? Jak mogę to zdobyć?

+0

Masz na myśli, że chcesz go skrócić jako "16: 11.34", czy coś innego? –

+0

Tak, trancate lub foramt lub parsowanie. Nie wiem – Prostak

+1

@Marcin, nie próbowałem, ponieważ nie wiem, co spróbować. – Prostak

Odpowiedz

21

Co o:

datetime.now().strftime('%M:%S.%f')[:-4]

Nie jestem pewien co masz na myśli przez „tylko 2 milisekund cyfr”, ale to powinno trzymać go do 2 miejsc po przecinku. Może być bardziej elegancki sposób, manipulując ciągiem strftime, aby zmniejszyć precyzję - nie jestem do końca pewien.

EDIT

Jeżeli modyfikator %f nie działa dla Ciebie, możesz spróbować czegoś takiego:

now=datetime.now() 
string_i_want=('%02d:%02d.%d'%(now.minute,now.second,now.microsecond))[:-4] 

Znowu jestem zakładając, że po prostu chcą obciąć precyzję.

+0

'>>> datetime.now(). Strftime ('% M:% S.% f ') [: - 4]' Wynik: '' Coś jest nie tak. – Prostak

+0

'[: -4]' oznacza "zacznij od początku i wyklucz 4 ostatnie znaki". Z jakiegoś powodu '% f' nie działa tutaj, a moim końcowym wynikiem jest' 36: 31.f' obcięty do '36:'. @Prostak może również uzyskać obcięty wynik ... – Izkata

+2

Co jest nie tak? Czy powoduje błąd? Myślę, że modyfikator% f został dodany w pythonie 2.6 (chociaż nie jestem pozytywny) - jakiej wersji python używasz? – mgilson

1

Inne podobne rozwiązanie:

>>> a=datetime.now() 
>>> "%s:%s.%s" % (a.hour, a.minute, a.microsecond) 
'14:28.971209' 

Tak, wiem, że nie dostał formatowania ciąg doskonały.

+0

co z metodą 'strftime()' .... Po prostu nie mogę znaleźć parametru dla milisekund 'datetime.now(). Strftime ('% M:% S. ??')'. może ty wiesz? – Prostak

+0

Chciałbym użyć '% d' zamiast'% s', ponieważ masz do czynienia z wartościami całkowitymi (** d ** igits). – NuclearPeon

2

To rozwiązanie jest bardzo podobny do przewidzianego przez @ gdw2, tylko że formatowanie łańcuch jest prawidłowo wykonane, aby dopasować co prosiłeś - „Powinien być możliwie jak najmniejsze”

>>> import datetime 
>>> a = datetime.datetime.now() 
>>> "%s:%s.%s" % (a.minute, a.second, str(a.microsecond)[:2]) 
'31:45.57' 
+0

co do metody 'strftime()' .... Po prostu nie mogę znaleźć parametru dla milisekund 'datetime.now(). Strftime ('% M:% S. ??')'. może ty wiesz? – Prostak

+0

Jeśli musisz użyć strftime, to rozwiązanie z @milil wygląda na to, co musisz zrobić, to jest: datetime.datetime.now(). Strftime ("% M:% S.% f") [: - . 4], aby uzyskać dokładny format, że hasła '>>> import datetime >>> datetime.datetime.now() strftime ("% M:% S% f") [: - 4] ' 14: 07.90'' – Pythomania

+0

% f nie działa w 2.4 – Prostak

0

time.second pomaga dużo umieścić na górze swojego pytona.

0

Przepraszamy za otwarcie starego wątku, ale publikuję na wszelki wypadek, gdy komuś pomaga. To wydaje się być najprostszym sposobem, aby to zrobić w Pythonie 3.

from datetime import datetime 

Date = str(datetime.now())[:10] 
Hour = str(datetime.now())[11:13] 
Minute = str(datetime.now())[14:16] 
Second = str(datetime.now())[17:19] 
Millisecond = str(datetime.now())[20:] 

Jeśli potrzebujesz wartości jako numer prostu rzucić je jako int np

Hour = int(str(datetime.now())[11:13]) 
1
import datetime from datetime 

now = datetime.now() 

print "%0.2d:%0.2d:%0.2d" % (now.hour, now.minute, now.second) 

można wykonać to samo z dniem & miesiąca itp.

Powiązane problemy