Как распечатать дату в обычном формате в Python?
Это мой код:
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"?
21 ответов
почему: даты являются объектами
в Python даты являются объектами. Поэтому, когда вы манипулируете ими, вы манипулируете объектами, а не строками, не временными метками или чем-то еще.
любой объект в Python имеет два строковых представления:
регулярное представление, которое используется "print", можно получить с помощью
-
%m
- номер месяца -
%b
это аббревиатура месяца -
%y
год последние две цифры -
%Y
это весь год
etc
взгляните на официальную документацию или краткий справочник Маккатчена вы не можете знаю их всех.
С PEP3101, каждый объект может иметь свой собственный формат, используемый автоматически методом format любой строки. В случае 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 (переполнение стека); -)
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
Edit:
после предложения Cees я также начал использовать время:
import time
print time.strftime("%Y-%m-%d %H:%M")
объекты 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
дата использования.функцию strftime. Аргументы форматирования описано в документации.
это то, что вы хотели:
some_date.strftime('%Y-%m-%d')
это учитывает Локаль. (сделай это)
some_date.strftime('%c')
# 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)
выход
2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
или даже
from datetime import datetime, date
"{:%d.%m.%Y}".format(datetime.now())
Out: '25.12.2013
или
"{} - {:%d.%m.%Y}".format("Today", datetime.now())
Out: 'Сегодня-25.12.2013'
"{:%A}".format(date.today())
Out:'Среда'
'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())
Out: '_ _ main _ _ _ 2014.06.09 _ _ 16-56.log'
С типом-specific datetime
форматирование строк (см. nk9 по используя str.format()
.) в форматированный строковый литерал (начиная с Python 3.6, 2016-12-23):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'
директивы формата даты/времени не документируются как часть Синтаксис Строки Формата а в date
, datetime
и time
' s strftime()
документация. Они основаны на стандарте 1989 C, но включают некоторые Директивы ISO 8601 начиная с Python 3.6.
необходимо преобразовать объект date time в строку.
следующий код работал для меня:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection
Дайте мне знать, если вам нужна дополнительная помощь.
вы можете добавить его в виде строки?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print mylist
from datetime import date
def time-format():
return str(date.today())
print (time-format())
это будет печатать 6-23-2018, если это то, что вы хотите:)
учитывая тот факт, что вы попросили что-то простое, чтобы сделать то, что вы хотели, вы могли просто:
import datetime
str(datetime.date.today())
С print today
возвращает то, что вы хотите, это означает, что сегодня объекта __str__
функция возвращает строку, которую вы ищете.
Так что вы можете сделать mylist.append(today.__str__())
Как хорошо.
можно использовать easy_date сделать это просто:
import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
быстрый отказ от ответственности за мой ответ - я только учусь 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
.
вот как отобразить дату как (год / месяц / день):
from datetime import datetime
now = datetime.now()
print '%s/%s/%s' % (now.year, now.month, now.day)
Я ненавижу идею импорта слишком много модулей для удобства. Я бы предпочел работать с модулем, который в данном случае составляет datetime
вместо вызова нового модуля time
.
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
Я не совсем понимаю, но, можете использовать 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')]
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-Jun-2017