Это мой код:
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?






Вам необходимо преобразовать объект datetime в str.
У меня сработал следующий код:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print(collection)
Сообщите мне, если вам понадобится дополнительная помощь.
Ну давай же ! Не поощряйте новичка хранить строку вместо объекта даты. Он не сможет понять, хорошая это идея или плохая ...
e-satis: Если все, что вам нужно, это веревка, в чем дело? Мы все время храним даты сборки прошивки в виде строк - иногда хранение всего объекта является излишним, когда все, что вам нужно, это простая временная метка (YAGNI и все такое).
Да, в некоторых случаях это так. Я просто имею в виду, что новичок не сможет идентифицировать эти случаи. Итак, начнем с правой ноги :-)
Вы можете добавить его в виде строки?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print(mylist)
Ты можешь сделать:
mylist.append(str(today))
Используйте date.strftime. Аргументы форматирования: описано в документации.
Это то, что вы хотели:
some_date.strftime('%Y-%m-%d')
Это учитывает Локаль. (сделай это)
some_date.strftime('%c')
В 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. Если вы хотите напечатать дату, вы должны распечатать объекты даты, а не их контейнер (список).
Например, вы хотите напечатать всю дату в списке:
for date in mylist :
print str(date)
Обратите внимание, что в этом конкретном случае, вы даже можете опустить str(), потому что print будет использовать его для вас. Но это не должно входить в привычку :-)
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Даты имеют представление по умолчанию, но вы можете распечатать их в определенном формате. В этом случае вы можете получить настраиваемое строковое представление с помощью метода strftime().
strftime() ожидает строкового шаблона, объясняющего, как вы хотите отформатировать дату.
Напр .:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Все буквы после "%" представляют собой формат для чего-то:
%d - это номер дня (2 цифры, при необходимости с начальным нулем)%m - это номер месяца (2 цифры, при необходимости с начальным нулем)%b - это аббревиатура месяца (3 буквы)%B - полное название месяца (буквы)%y - сокращенный номер года (последние 2 цифры)%Y - полный номер года (4 цифры)и т.п.
Взгляните на официальную документацию или Краткий справочник Маккатчена, вы не можете знать их все.
Начиная с PEP3101, каждый объект может иметь свой собственный формат, автоматически используемый форматом метода любой строки. В случае datetime формат тот же, что и в strftime. Таким образом, вы можете сделать то же самое, что и выше, вот так:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
Преимущество этой формы в том, что вы также можете одновременно конвертировать другие объекты. С введением Форматированные строковые литералы (начиная с Python 3.6, 2016-12-23) это можно записать как
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Финики могут автоматически адаптироваться к местному языку и культуре, если вы используете их правильно, но это немного сложно. Может быть, для другого вопроса о SO (переполнение стека) ;-)
Кстати, почти каждый тип данных в python - это класс (кроме неизменяемых, но они могут быть подклассами) stackoverflow.com/questions/865911/…
Что значит «почти»? str и int имеют атрибут класс, который содержит «тип», поэтому существует сам класс, поскольку они являются экземплярами метакласса типа.
Это как раз вопрос терминологии: type! = Class ?, т.е. достаточно ли иметь атрибут типа (предоставить механизм вывода типа для квалификации объекта) или сущность должна вести себя как объект. Я пытаюсь решить это для себя здесь programmers.stackexchange.com/questions/164570/…
Если вы являетесь экземпляром класса, вы являетесь объектом. Зачем нужно усложнять?
Чтобы понять, как Python реализует парадигму объектно-ориентированного программирования. Конечно, самое интересное в программировании на Python - вам даже не нужно знать, что дата является объектом или что такое ООП - вы можете просто написать фрагмент кода и быть довольным тем, что он работает. Я думаю, задавая вопрос "что такое объект?" приводит к теории обучения. Я не думаю, что есть гарантия, что ООП улучшит навыки программирования - это только теоретический аспект, который в конечном итоге может. Например. зная, что можно реализовать / достичь OO-поведения без вывода типа (a = 1; issubclass (type (a), int) выводит тип), круто.
Каждое значение в Python - это объект. У каждого объекта есть тип. "тип" == "класс" формально (также см. inspect.isclass, чтобы убедиться). Люди обычно говорят "тип" для встроенных модулей и "класс" для остальных, но это не важно.
Я думаю, что раздел PEP3101 следует переместить ближе к началу, а примеры, включая strftime, следует переместить в конец приложения, в котором говорится: «Если вы используете старую версию ...»
Не могли бы вы изменить свой ответ на python-3.x, пожалуйста?
Автору этого ответа следует подумать о карьере в обновлении основной документации Python, качество которой является основной причиной такого количества таких вопросов;)
используйте в этом случае: telegram_message = "" "\" <b> Critical_Open: "" "+ f" {datetime.datetime.now ():% Y-% m-% d% H:% M:% S} " + "" "</b> <pre> Порядок" "" + пороговые значения [0] ['name'] + "" "" "" "+ пороговые значения [0] ['описать'] +" "" </pre> <code> больше 10 с </code> \ "" ""
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
Редактировать:
После Предложение Сиз я тоже начал использовать время:
import time
print time.strftime("%Y-%m-%d %H:%M")
Можно использовать от 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), для создания строки, представляющей время под контролем явного формата нить.
Вот список кодов формата с их директивами и значением.
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%f Microsecond as a decimal number [0,999999], zero-padded on the left
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM.
%S Second as a decimal number [00,61].
%U Week number of the year (Sunday as the first day of the week)
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week)
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%z UTC offset in the form +HHMM or -HHMM.
%Z Time zone name (empty string if the object is naive).
%% A literal '%' character.
Это то, что мы можем делать с модулями datetime и time в Python.
import time
import datetime
print "Time in seconds since the epoch: %s" %time.time()
print "Current date and time: ", datetime.datetime.now()
print "Or like this: ", datetime.datetime.now().strftime("%y-%m-%d-%H-%M")
print "Current year: ", datetime.date.today().strftime("%Y")
print "Month of year: ", datetime.date.today().strftime("%B")
print "Week number of the year: ", datetime.date.today().strftime("%W")
print "Weekday of the week: ", datetime.date.today().strftime("%w")
print "Day of year: ", datetime.date.today().strftime("%j")
print "Day of the month : ", datetime.date.today().strftime("%d")
print "Day of week: ", datetime.date.today().strftime("%A")
Это напечатает что-то вроде этого:
Time in seconds since the epoch: 1349271346.46
Current date and time: 2012-10-03 15:35:46.461491
Or like this: 12-10-03-15-35
Current year: 2012
Month of year: October
Week number of the year: 40
Weekday of the week: 3
Day of year: 277
Day of the month : 03
Day of week: Wednesday
Это решило мою проблему, в которой «ответы с большим количеством голосов» - нет. Но моя проблема отличалась от OP. Я хотел, чтобы месяцы были напечатаны в виде текста («Февраль», а не «2»)
Это короче:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
Или даже
from datetime import datetime, date
"{:%d.%m.%Y}".format(datetime.now())
Вышел: '25 .12.2013
или же
"{} - {:%d.%m.%Y}".format("Today", datetime.now())
Ушел: 'Сегодня - 25.12.2013'
"{:%A}".format(date.today())
Выход: 'Среда'
'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())
Вышел: '__main ____ 2014.06.09__16-56.log'
Поскольку print today возвращает то, что вы хотите, это означает, что функция __str__ объекта today возвращает искомую строку.
Так что вы тоже можете использовать mylist.append(today.__str__()).
Простой ответ -
datetime.date.today().isoformat()
Небольшой отказ от ответственности за свой ответ - я изучаю Python всего около 2 недель, так что я ни в коем случае не эксперт; поэтому мое объяснение может быть не лучшим, и я могу использовать неправильную терминологию. В любом случае, вот оно.
Я заметил в вашем коде, что, когда вы объявили свою переменную today = datetime.date.today(), вы решили назвать свою переменную именем встроенной функции.
Когда ваша следующая строка кода mylist.append(today) добавляла ваш список, она добавляла всю строку datetime.date.today(), которую вы ранее установили как значение вашей переменной today, а не просто добавляла today().
Простое решение, хотя, возможно, не один из большинства программистов будет использовать при работе с модулем datetime, является изменение имени вашей переменной.
Вот что я пробовал:
import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present
и печатает yyyy-mm-dd.
Я ненавижу импортировать слишком много модулей для удобства. Я бы предпочел работать с доступным модулем, которым в данном случае является datetime, а не называть новый модуль time.
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
Я думаю, что было бы эффективнее сделать это одной строкой кода, выполнив a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Вы можете использовать easy_date, чтобы упростить:
import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
Вот как отобразить дату как (год / месяц / день):
from datetime import datetime
now = datetime.now()
print '%s/%s/%s' % (now.year, now.month, now.day)
# convert date time to regular format.
d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
OUTPUT
2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
С форматированием строки datetime для конкретного типа (см. ответ nk9 с использованием str.format().) В Форматированный строковый литерал (начиная с Python 3.6, 2016-12-23):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'
Директивы формата даты / времени не задокументированы как часть Синтаксис строки формата, а скорее в документации date, datetime и timestrftime(). Они основаны на стандарте C 1989 года, но включают некоторые директивы ISO 8601, начиная с Python 3.6.
Обратите внимание, что я также добавил эту информацию в принятый отвечать.
strftime на самом деле не включает «вывод ISO 8601». Есть «директивы», но только для определенных токенов, таких как «день недели», а не для всей временной метки ISO 8601, что меня всегда раздражало.
import datetime
import time
months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {'01': 'Jan', '02':'Feb','03':'Mar','04':'Apr','05':'May','06': 'Jun','07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'}
result = choices.get(month, 'default')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date
Таким образом вы можете получить дату в формате, подобном этому примеру: 22 июня 2017 г.
Слишком много кода для чего-то, что можно поместить в одну строку. С %b вы получите слова за первые три месяца, а с %B - за весь месяц. Пример: datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S") вернет '2018-Oct-04 09:44:08'
from datetime import date
def today_in_str_format():
return str(date.today())
print (today_in_str_format())
Это напечатает 2018-06-23, если вы этого хотите :)
Учитывая тот факт, что вы просили что-то простое, чтобы сделать то, что вы хотели, вы могли просто:
import datetime
str(datetime.date.today())
Я не совсем понимаю, но могу использовать pandas для получения времени в правильном формате:
>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>>
И:
>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']
Но он хранит строки, но его легко преобразовать:
>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]
Целая зависимость, чтобы делать что-то в библиотеке Python std, есть методы для выполнения?
Для тех, кому нужна дата на основе локали без учета времени, используйте:
>>> some_date.strftime('%x')
07/11/2019
str()(к каждому элементу списка), потому что это именно то, чтоprintнеявно сделал с вашим соло-объектомtoday.