Как распечатать дату в обычном формате в 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')

Это короче:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'

# 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'


простой ответ -

datetime.date.today().isoformat()

С типом-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

вы можете сделать:

mylist.append(str(today))

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