如何以常规格式打印日期?

时间:2008-11-22 18:37:08

标签: python datetime date

这是我的代码:

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”这样的简单日期?

22 个答案:

答案 0 :(得分:870)

WHY:日期是对象

在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)'

当您使用“打印”打印日期时,它使用了str(),因此您可以看到一个漂亮的日期字符串。但是,当您打印mylist时,您已经打印了一个对象列表,Python尝试使用repr()来表示数据集。

如何:你想用它做什么?

好吧,当你操纵日期时,请继续使用日期对象。他们获得了数以千计的有用方法,而且大多数Python API都希望将日期作为对象。

如果要显示它们,只需使用str()即可。在Python中,良好的做法是明确地投射所有内容。因此,只有在打印时,使用str(date)获取日期的字符串表示。

最后一件事。当您尝试打印日期时,您打印了mylist。如果要打印日期,则必须打印日期对象,而不是其容器(列表)。

E.G,您想在列表中打印所有日期:

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()需要一个字符串模式,说明您希望如何设置日期格式。

E.G:

print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'

"%"之后的所有字母代表某种格式:

  • %d是日期编号
  • %m是月号
  • %b是月份缩写
  • %y是最后两位数字
  • %Y是全年

Have a look at the official documentationMcCutchen's quick reference你无法全部了解它们。

PEP3101开始,每个对象都可以通过任何字符串的方法格式自动使用自己的格式。在datetime的情况下,格式与使用的格式相同 strftime的。所以你可以像上面这样做:

print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'

此表单的优点是您还可以同时转换其他对象 随着Formatted string literals的引入(自Python 3.6,2016-12-23以来),这可以写成

import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'

本地化

如果你以正确的方式使用它们,日期可以自动适应当地的语言和文化,但它有点复杂。也许关于SO的另一个问题(Stack Overflow); - )

答案 1 :(得分:297)

import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

修改

在Cees建议之后,我也开始使用时间了:

import time
print time.strftime("%Y-%m-%d %H:%M")

答案 2 :(得分:141)

日期,日期时间和时间对象都支持strftime(格式)方法, 创建一个表示显式格式控制下的时间的字符串 字符串。

以下是格式代码的列表及其指令和含义。

    %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.

这是我们可以用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

答案 3 :(得分:69)

使用date.strftime。格式参数为described in the documentation

这是你想要的:

some_date.strftime('%Y-%m-%d')

这个考虑了Locale。 (做这个)

some_date.strftime('%c')

答案 4 :(得分:31)

这更短:

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

答案 5 :(得分:24)

# 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

答案 6 :(得分:21)

甚至

from datetime import datetime, date

"{:%d.%m.%Y}".format(datetime.now())

Out:'25 .12.2013

"{} - {:%d.%m.%Y}".format("Today", datetime.now())

Out:'今天 - 2013年12月25日'

"{:%A}".format(date.today())

出:'星期三'

'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())

Out:'__ main ____ 2014.06.09__16-56.log'

答案 7 :(得分:10)

简单回答 -

datetime.date.today().isoformat()

答案 8 :(得分:7)

使用datetime中的特定于类型的nk9's answer字符串格式(请参阅str.format()使用Formatted string literal。)(自Python 3.6,2016-12-23):

>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'

日期/时间格式指令未记录为Format String Syntax的一部分,而是记录在datedatetimetime' s {{3文档。它们基于1989 C标准,但包括自Python 3.6以来的一些ISO 8601指令。

答案 9 :(得分:3)

您需要将日期时间对象转换为字符串。

以下代码对我有用:

import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection

如果您需要更多帮助,请与我们联系。

答案 10 :(得分:2)

你可以这样做:

mylist.append(str(today))

答案 11 :(得分:2)

考虑到您要求做一些简单的事情来做自己想做的事情,您可以:

import datetime
str(datetime.date.today())

答案 12 :(得分:1)

由于print today返回您想要的内容,这意味着今天对象的__str__函数返回您要查找的字符串。

所以你也可以做mylist.append(today.__str__())

答案 13 :(得分:1)

from datetime import date
def time-format():
  return str(date.today())
print (time-format())

如果您要这样的话,它将打印6-23-2018:)

答案 14 :(得分:1)

我讨厌为方便起见导入太多模块的想法。我宁愿使用可用模块,在这种情况下是datetime而不是调用新模块time

>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'

答案 15 :(得分:1)

您可能希望将其附加为字符串吗?

import datetime 
mylist = [] 
today = str(datetime.date.today())
mylist.append(today) 
print mylist

答案 16 :(得分:0)

我不太了解,但是可以使用import Testimonial ,{containers} from './ignitus-Testimonial'; 以正确的格式获取时间:

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

答案 17 :(得分:0)

对于那些希望基于区域设置的日期且不包括时间的用户,请使用:

some_date.strftime('%x')
>>> 07/11/2019

答案 18 :(得分:0)

以下是如何将日期显示为(年/月/日):

from datetime import datetime
now = datetime.now()

print '%s/%s/%s' % (now.year, now.month, now.day)

答案 19 :(得分:0)

您可以使用easy_date轻松实现:

import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')

答案 20 :(得分:0)

我的回答快速免责声明 - 我只学习了大约2周的Python,所以我绝不是专家;因此,我的解释可能不是最好的,我可能会使用不正确的术语。无论如何,它就在这里。

我在您的代码中注意到,当您声明变量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

答案 21 :(得分:-1)

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

通过这种方式,您可以获得日期格式,如下例所示:2017年6月22日