Изменить формат отображения времени python 3 [дублировать]

Ваш словарь содержит строки с байтами UTF-8 . Python 2 всегда будет использовать \xhh при представлении таких байтов в отладочном выходе, в том числе при показе содержимого словаря (для которого используется выход функции repr()).

Python делает это, чтобы сделать ваш отладочный вывод подходящим для воссоздания первоначального значения просто путем копирования и вставки в любой сеанс интерпретатора Python или нового сценария, не беспокоясь о конфигурации терминала или редактора, не поддерживая ASCII.

Вы видите то же самое, когда эхо строк в интерактивном сеансе:

>>> text = 'डिनर के बाद चहलकदमी को पारिवारिक परंपरा बनाएं'
>>> print text
डिनर के बाद चहलकदमी को पारिवारिक परंपरा बनाएं
>>> text
'\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xa8\xe0\xa4\xb0 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\xa6 \xe0\xa4\x9a\xe0\xa4\xb9\xe0\xa4\xb2\xe0\xa4\x95\xe0\xa4\xa6\xe0\xa4\xae\xe0\xa5\x80 \xe0\xa4\x95\xe0\xa5\x8b \xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x8f\xe0\xa4\x82'

Если вы должны напечатать исходные байты непосредственно на своем терминале, не печатайте словарь. Вам нужно будет сделать свое собственное форматирование, чтобы избежать выдачи repr().

272
задан davidchambers 3 November 2011 в 20:49
поделиться

9 ответов

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
589
ответ дан Sven Marnach 20 August 2018 в 13:11
поделиться
  • 1
    Коллега просто убедительно доказал, что это правильный подход. Считайте меня убежденным. – davidchambers 3 November 2011 в 21:34
  • 2
    Хотя и относительно медленно. – Austin Marshall 3 November 2011 в 21:37
  • 3
    Что было в этом убедительном случае - это решение было выше вашего решения, используя datetime.replace? – matlehmann 14 January 2014 в 13:36
  • 4
    @matlehmann: Конечно, я не знаю аргументов коллеги Дэвидхамберса. Тем не менее, я думаю, что если вы намерены распечатать дату в очень конкретном формате, вы должны четко указать это намерение. Код в этом ответе говорит «взять текущее время и форматировать его точно так же». Код в другом ответе говорит «взять текущее время, установить микросекунды на 0, а затем преобразовать его в строку как-то». – Sven Marnach 14 January 2014 в 16:41
  • 5
    +1, будучи явным в отношении формата строки, позволяет избежать проблем, если стандартное преобразование datetime-str изменяется в будущей версии Python – Alan Evangelista 11 November 2014 в 16:04

Мы можем попробовать что-то вроде ниже

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
1
ответ дан Abhishek Bajaj 20 August 2018 в 13:11
поделиться
  • 1
    Это уступает .isoformat(' ', 'seconds'), предложенному в более раннем ответе. – davidchambers 1 February 2018 в 13:50
  • 2
    Когда я пытаюсь предложить выше более ранний ответ, я становлюсь ниже error & gt; & gt; & gt; & gt; & gt; datetime.datetime.now (). isoformat ('', 'seconds') Traceback (последний последний вызов): File & quot; & lt; stdin & gt ;, строка 1, в & lt; module & gt; TypeError: isoformat () принимает не более 1 аргумента (2) – Abhishek Bajaj 8 February 2018 в 07:32
  • 3
    Ах я вижу. Он работает для меня на Python 3, но не на Python 2. – davidchambers 8 February 2018 в 11:41
  • 4
    Я использую версию python 3.4.3, потому что вижу эту ошибку. & GT; & GT; & GT; datetime.datetime.now (). isoformat ('', 'seconds') Traceback (последний последний вызов): File & quot; & lt; stdin & gt ;, строка 1, в & lt; module & gt; TypeError: isoformat () принимает не более 1 аргумента (2) – Abhishek Bajaj 9 February 2018 в 07:09

Еще один вариант:

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

По умолчанию это использует локальное время, если вам нужен UTC, вы можете использовать следующее:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
13
ответ дан Andrew Clark 20 August 2018 в 13:11
поделиться
  • 1
    Downvote, потому что ОП спросил о дате, а не о времени. – Jürgen A. Erhard 23 May 2015 в 06:39

Поскольку не все экземпляры datetime.datetime имеют микросекундный компонент (т. е. когда он равен нулю), вы можете разбить строку на «.». и возьмите только первый элемент, который всегда будет работать:

unicode(datetime.datetime.now()).partition('.')[0]
5
ответ дан Austin Marshall 20 August 2018 в 13:11
поделиться

В Python 3.6:

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

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

21
ответ дан codeif 20 August 2018 в 13:11
поделиться
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
128
ответ дан davidchambers 20 August 2018 в 13:11
поделиться

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

1
ответ дан jiahut 20 August 2018 в 13:11
поделиться
  • 1
    Это дубликат ответа Свена Марнаха, не так ли? – davidchambers 15 August 2014 в 07:39
  • 2
    Это дубликат ответа Свена Марнаха, за исключением подчеркивания и %f в строке формата. Это делает этот ответ неправильным. – Steven Rumbalski 23 January 2015 в 16:00

Так я это делаю. Формат ISO:

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

Вы можете заменить «T», если вы не хотите формат ISO:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
26
ответ дан radtek 20 August 2018 в 13:11
поделиться
  • 1
    Это похоже на мой ответ. Есть ли причина одобрить .isoformat() по сравнению с unicode()? – davidchambers 24 January 2017 в 01:25
  • 2
    Зависит от того, что вы хотите, если вы хотите, чтобы представление строки python использовало unicode(), и если вы хотите ISO-8601, используйте isoformat() – radtek 24 January 2017 в 15:57
  • 3
    Понимаю. unicode() удобнее, чем .isoformat().replace('T', ' '), конечно. ;) – davidchambers 24 January 2017 в 17:49
  • 4
    Я бы просто использовал решение Sven для формата non-iso, более явное: datetime.now (). Strftime («% Y-% m-% d% H:% M»), но замена «T» - это просто другой путь. Может быть лучшим решением, если вам нужна дата ISO и юникода. – radtek 24 January 2017 в 20:51
  • 5
    isoformat принимает спецификатор разделителя, поэтому замена не должна выполняться. просто сделайте: datetime.datetime.now().replace(microsecond=0).isoformat(' ') – coya 25 July 2017 в 18:18

Сохраните первые 19 символов, которые вы хотели бы нарезать:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
12
ответ дан Steven Rumbalski 20 August 2018 в 13:11
поделиться
  • 1
    Это неверно, потому что строки времени могут содержать спецификацию часового пояса, например. +05:30. Правильно будет str(now())[:19]. – K3---rnc 19 February 2016 в 16:18
  • 2
    @ K3 --- rnc: Спасибо. Обновлено по вашему предложению. – Steven Rumbalski 5 May 2017 в 19:39
Другие вопросы по тегам:

Похожие вопросы: