Это мой код:
import datetime
today = datetime.date.today()
print(today)
Это печатает: 2008-11-22
что именно то, что я хочу.
Но у меня есть список, к которому я добавляю это, и затем внезапно все становится "вялым". Вот код:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
Это печатает следующее:
[datetime.date(2008, 11, 22)]
Как я могу получить просто простое свидание, как 2008-11-22
?
str()
(к каждому элементу списка), потому что это именно то, чтоprint
неявно поступило с вашим сольнымtoday
объектом.Ответы:
ПОЧЕМУ: даты являются объектами
В Python даты - это объекты. Поэтому, когда вы манипулируете ими, вы манипулируете объектами, а не строками, ни временными метками, ни чем-либо еще.
Любой объект в Python имеет два строковых представления:
Обычное представление, которое используется «print», можно получить с помощью
str()
функции. В большинстве случаев это самый распространенный читаемый формат, используемый для облегчения отображения. Такstr(datetime.datetime(2008, 11, 22, 19, 53, 42))
дает тебе'2008-11-22 19:53:42'
.Альтернативное представление, которое используется для представления природы объекта (в виде данных). Его можно использовать с помощью
repr()
функции, и это удобно для того, чтобы узнать, какими данными вы манипулируете во время разработки или отладки.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
дает вам'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.Случилось так, что когда вы напечатали дату, используя «print», она использовалась,
str()
чтобы вы могли видеть красивую строку даты. Но когда вы напечаталиmylist
, вы распечатали список объектов, и Python попытался представить набор данных, используяrepr()
.Как: что вы хотите с этим сделать?
Хорошо, когда вы манипулируете датами, продолжайте использовать объекты даты все время. Они получили тысячи полезных методов, и большинство API Python ожидают, что даты будут объектами.
Когда вы хотите отобразить их, просто используйте
str()
. В Python хорошей практикой является явное приведение всех. Так что, когда пришло время печатать, получите строковое представление вашей даты, используяstr(date)
.Одна последняя вещь. Когда вы пытались напечатать даты, вы напечатали
mylist
. Если вы хотите напечатать дату, вы должны напечатать объекты даты, а не их контейнер (список).Например, вы хотите напечатать всю дату в списке:
Обратите внимание, что в этом конкретном случае вы можете даже опустить,
str()
потому что print будет использовать его для вас. Но это не должно стать привычкой :-)Практический пример использования вашего кода
Расширенное форматирование даты
Даты имеют представление по умолчанию, но вы можете распечатать их в определенном формате. В этом случае вы можете получить пользовательское строковое представление, используя
strftime()
метод.strftime()
ожидает строковый шаблон, объясняющий, как вы хотите отформатировать дату.EG:
Все буквы после
"%"
формата представляют для чего-то:%d
номер дня%m
номер месяца%b
это сокращение месяца%y
это год последние две цифры%Y
это весь годтак далее
Взгляните на официальную документацию или краткий справочник Маккатчена, вы не можете знать их все.
Начиная с PEP3101 , каждый объект может иметь свой собственный формат, автоматически используемый форматом метода любой строки. В случае даты и времени формат тот же, что и в strftime. Таким образом, вы можете сделать то же, что и выше, как это:
Преимущество этой формы в том, что вы также можете конвертировать другие объекты одновременно.
С введением форматированных строковых литералов (начиная с Python 3.6, 2016-12-23) это можно записать как
локализация
Даты могут автоматически адаптироваться к местному языку и культуре, если вы используете их правильно, но это немного сложно. Может быть, для другого вопроса по SO (переполнение стека) ;-)
источник
inspect.isclass
чтобы убедиться). Люди обычно говорят «тип» для встроенных модулей и «класс» для остальных, но это не важноРедактировать:
После предложения Cees я тоже начал использовать время:
источник
datetime.datetime
?datetime import datetime
, а затемprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Только разница в синтаксисе.from datetime import date; date.today().strftime("%Y-%m-%d")
все еще выглядит непривычно для меня, но это лучшее безimport time
. Я думаю, что модуль datetime предназначен для математики даты.from datetime import datetime as dt
и теперь мы можем играть сdt.now()
Все объекты date, datetime и time поддерживают метод strftime (format) для создания строки, представляющей время под контролем явной строки формата.
Вот список кодов формата с их директивой и значением.
Это то, что мы можем сделать с модулями datetime и time в Python
Это распечатает что-то вроде этого:
источник
Используйте date.strftime. Аргументы форматирования описаны в документации .
Это то, что вы хотели:
Этот учитывает локаль. (сделай это)
источник
Это короче:
источник
источник
Или даже
Выход: 25.12.2013
или
Выход: «Сегодня - 25.12.2013»
Out: «среда»
Out: '__main ____ 2014.06.09__16-56.log'
источник
Простой ответ -
источник
С
datetime
форматным форматированием строки (см . Ответ nk9, используяstr.format()
.) В строковом литерале Formatted (начиная с Python 3.6, 2016-12-23):Директивы формат даты / времени не документированы как часть формата строки синтаксиса , а в
date
,datetime
иtime
«sstrftime()
документации. Они основаны на стандарте C 1989 года, но содержат некоторые директивы ISO 8601 начиная с Python 3.6.источник
Вам необходимо преобразовать объект даты и времени в строку.
Следующий код работал для меня:
Дайте мне знать, если вам нужна дополнительная помощь.
источник
Я ненавижу идею импортировать слишком много модулей для удобства. Я предпочел бы работать с доступным модулем, который в этом случае,
datetime
а не вызов нового модуляtime
.источник
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Ты можешь сделать:
источник
Учитывая тот факт, что вы попросили что-то простое, чтобы сделать то, что вы хотели, вы можете просто:
источник
Для тех, кому нужна дата на основе локали, но не включая время, используйте:
источник
Вы можете добавить это как строку?
источник
Так как
print today
возвращает то, что вы хотите, это означает, что объект сегодня__str__
функция возвращает искомую строку.Так что вы можете сделать то
mylist.append(today.__str__())
же самое .источник
Вы можете использовать easy_date, чтобы сделать это легко:
источник
Быстрый отказ от ответа - я изучаю Python только около 2 недель, поэтому я ни в коем случае не эксперт; поэтому мое объяснение может быть не самым лучшим, и я могу использовать неправильную терминологию. Во всяком случае, здесь это идет.
Я заметил в вашем коде, что когда вы объявили свою переменную,
today = datetime.date.today()
вы решили присвоить ей имя с именем встроенной функции.Когда ваша следующая строка кода
mylist.append(today)
добавила ваш список, она добавила всю строкуdatetime.date.today()
, которую вы ранее установили как значение вашейtoday
переменной, а не просто добавивtoday()
.Простое решение, хотя, возможно, не самое подходящее для работы с модулем datetime, это изменение имени вашей переменной.
Вот что я попробовал:
и это печатает
yyyy-mm-dd
.источник
Вот как отобразить дату как (год / месяц / день):
источник
это напечатает 6-23-2018, если это то, что вы хотите :)
источник
Таким образом, вы можете получить дату в следующем формате: 22-Jun-2017
источник
%b
вами получат первые три месяца слова, причем со%B
всего месяца. Пример:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
вернется '2018-Oct-04 09:44:08'Я не совсем понимаю, но могу использовать
pandas
для получения времени в нужном формате:А также:
Но он хранит строки, но их легко конвертировать:
источник