如何以常规格式打印日期? [英] How to print a date in a regular format?

查看:84
本文介绍了如何以常规格式打印日期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

import datetime
today = datetime.date.today()
print(today)

打印: 2008-11-22 正是我想要的。

但是,我有一个列表要附加到该列表上,然后突然所有内容都变得不可思议。这是代码:

But, I have a list I'm appending this to and then suddenly everything goes "wonky". Here is the code:

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

此打印以下内容:

[datetime.date(2008, 11, 22)]

如何获得像 2008-11-22 这样的简单日期?

How can I get just a simple date like 2008-11-22?

推荐答案

为什么:日期是对象


在Python中,日期是对象。因此,在操纵它们时,您操纵的是对象,而不是字符串或时间戳。

The WHY: dates are objects

In Python, dates are objects. Therefore, when you manipulate them, you manipulate objects, not strings or timestamps.

Python中的任何对象都有两个字符串表示形式:

Any object in Python has TWO string representations:


  • print 使用的常规表示形式可以使用 str()函数获取。在大多数情况下,它是最常见的人类可读格式,用于简化显示。所以 str(datetime.datetime(2008,11,22,19,53,42))给你'2008-11-22 19:53 :42'

  • The regular representation that is used by print can be get using the str() function. It is most of the time the most common human readable format and is used to ease display. So str(datetime.datetime(2008, 11, 22, 19, 53, 42)) gives you '2008-11-22 19:53:42'.

用于表示对象性质(作为数据)的替代表示。可以使用 repr()函数获得它,并且很容易知道在开发或调试时要处理的数据类型。 repr(datetime.datetime(2008,11,22,19,53,42))为您提供'datetime.datetime(2008,11,22 ,19,53,42)'

The alternative representation that is used to represent the object nature (as a data). It can be get using the repr() function and is handy to know what kind of data your manipulating while you are developing or debugging. repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) gives you 'datetime.datetime(2008, 11, 22, 19, 53, 42)'.

使用 print 打印日期,并使用 str()打印日期,因此您可以看到一个不错的日期字符串。但是,当您打印 mylist 时,您已经打印了一个对象列表,Python尝试使用 repr()

What happened is that when you have printed the date using print, it used str() so you could see a nice date string. But when you have printed mylist, you have printed a list of objects and Python tried to represent the set of data, using repr().

那么,当您操作日期时,请继续使用日期一路走来。他们有成千上万种有用的方法,大多数Python API都希望日期成为对象。

Well, when you manipulate dates, keep using the date objects all long the way. They got thousand of useful methods and most of the Python API expect dates to be objects.

要显示它们,只需使用 str()。在Python中,优良作法是显式转换所有内容。因此,仅在需要打印时,使用 str(date)获得日期的字符串表示。

When you want to display them, just use str(). In Python, the good practice is to explicitly cast everything. So just when it's time to print, get a string representation of your date using str(date).

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

One last thing. When you tried to print the dates, you printed mylist. If you want to print a date, you must print the date objects, not their container (the list).

EG,您要打印列表中的所有日期:

E.G, you want to print all the date in a list :

for date in mylist :
    print str(date)

请注意,在特定情况下 ,您甚至可以省略 str(),因为打印会为您使用。但这不应该成为习惯:-)

Note that in that specific case, you can even omit str() because print will use it for you. But it should not become a habit :-)

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()方法获得自定义字符串表示形式。

Advanced date formatting

Dates have a default representation, but you may want to print them in a specific format. In that case, you can get a custom string representation using the strftime() method.

strftime( )需要一个字符串模式来说明如何格式化日期。

strftime() expects a string pattern explaining how you want to format your date.

EG:

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

所有在%之后的字母表示某种格式:


  • %d 是日期

  • %m 是月份数

  • %b 是月份的缩写

  • %y 是年份的后两位数字

  • %Y 是全年

  • %d is the day number
  • %m is the month number
  • %b is the month abbreviation
  • %y is the year last two digits
  • %Y is the all year

etc

查看官方文档 McCutchen的快速参考,您可能一无所知。

Have a look at the official documentation, or McCutchen's quick reference you can't know them all.

自< a href = http://www.python.org/dev/peps/pep-3101/ rel = noreferrer> PEP3101 ,每个对象都可以具有自己的格式,该格式可以由任何对象的方法格式自动使用串。对于日期时间,格式与
strftime中使用的格式相同。因此,您可以像上面一样进行上述操作:

Since PEP3101, every object can have its own format used automatically by the method format of any string. In the case of the datetime, the format is the same used in strftime. So you can do the same as above like this:

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

这种形式的优势在于,您还可以在同一条件下转换其他对象时间。

随着格式化字符串文字(自Python 3.6,2016年12月23日起)可以写成

The advantage of this form is that you can also convert other objects at the same time.
With the introduction of Formatted string literals (since Python 3.6, 2016-12-23) this can be written as

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


本地化


日期可以自动适应如果您以正确的方式使用当地语言和文化,那会有些复杂。也许是关于SO(堆栈溢出)的另一个问题;-)

Localization

Dates can automatically adapt to the local language and culture if you use them the right way, but it's a bit complicated. Maybe for another question on SO(Stack Overflow) ;-)

这篇关于如何以常规格式打印日期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆