Python datetime to string bez komponentu mikrosekundy

Dodaję ciągi czasu UTC do odpowiedzi Bitbucket API, które obecnie zawierają tylko Amsterdam (!) struny czasu. Dla spójności z łańcuchami czasu UTC zwracanymi gdzie indziej, pożądanym formatem jest 2011-11-03 11:07:04 (po którym następuje +00:00, ale to nie jest germańskie).

Jaki jest najlepszy sposób na utworzenie takiego ciągu znaków ( Bez mikrosekundy składowej) z instancji datetime z mikrosekundy składowej?

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

Dodam najlepsze rozwiązanie, które przyszło mi do głowy jako możliwe odpowiedź, ale może być bardziej eleganckie rozwiązanie.

Edit: powinienem wspomnieć, że nie jestem w rzeczywistości drukujący bieżący czas – użyłem datetime.now, aby podać szybki przykład. Rozwiązanie nie powinno więc zakładać, że jakiekolwiek instancje datetime, które otrzymuje, będą zawierały komponenty mikrosekundowe.

Author: davidchambers, 2011-11-03

9 answers

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
 618
Author: Sven Marnach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 18:22:00
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
 130
Author: davidchambers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 18:19:44

Tak to robię. Format ISO:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

Możesz zastąpić "T", jeśli nie chcesz formatu ISO:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
 29
Author: radtek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 19:09:26

W Pythonie 3.6:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

Https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat

 26
Author: codeif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 23:42:11

Yet another option:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

Domyślnie używa czasu lokalnego, jeśli potrzebujesz czasu UTC, możesz użyć następującego:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
 13
Author: Andrew Clark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 18:32:40

Zachowaj pierwsze 19 znaków, które chciałeś przez krojenie:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
 12
Author: Steven Rumbalski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-07 21:38:24

Ponieważ nie wszystkie instancje datetime.datetime mają komponent mikrosekundowy (tzn. gdy jest zero), można podzielić łańcuch na"."i weź tylko pierwszy przedmiot, który zawsze zadziała:

unicode(datetime.datetime.now()).partition('.')[0]
 5
Author: Austin Marshall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 19:35:51

Możemy spróbować czegoś takiego jak poniżej

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
 1
Author: Abhishek Bajaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 09:34:42

From datetime import datetime
now = datetime.teraz().strftime("%Y - % m - % d_ % H:%M: % S. % f")

 0
Author: jiahut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 02:49:29