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

这是我的代码:

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

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

但是,我有一个列表,我正在附加这个列表,然后突然一切都变得“不稳定”。这是代码:

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

这将打印以下内容:

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

我怎么能得到像2008-11-22这样简单的日期?

1582603 次浏览

您需要将datetime对象转换为str

以下代码对我有用:

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

使用date.strftime.格式参数为在留档中描述

这是你想要的:

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

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

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()来表示这组数据。

怎么做:你想用它做什么?

好吧,当您操作日期时,请一直使用日期对象。他们有数千种有用的方法,大多数Python API都希望日期是对象。

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

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

例如,您想打印列表中的所有日期:

for date in mylist :print str(date)

请注意,在这种情况下,您甚至可以省略str(),因为print将为您使用它。但它不应该成为一种习惯:-)

实际案例,使用您的代码

import datetimemylist = []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位)

看看官方留档McCutchen的快速参考你不可能都知道。

PEP3101开始,每个对象都可以有自己的格式,由任何字符串的方法格式自动使用。对于datetime,格式与所以你可以像上面这样做:

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

这种形式的优点是您还可以同时转换其他对象。
随着格式化字符串文字的引入(从Python 3.6开始,2016-12-23),这可以写为

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

本地化

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

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

编辑:

塞斯的建议之后,我也开始使用时间:

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

datedatetimetime对象都支持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.

这就是我们可以用Python中的datetime和time模块做的事情

import timeimport 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.46Current date and time:              2012-10-03 15:35:46.461491Or like this:                       12-10-03-15-35Current year:                       2012Month of year:                      OctoberWeek number of the year:            40Weekday of the week:                3Day of year:                        277Day of the month :                  03Day of week:                        Wednesday

这更短:

>>> 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())

出局时间:2013年12月25日

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

输出:“今天-2013年12月25日”

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

出:“星期三”

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

出局:__main____2014.0609__16-56.log

由于print today返回你想要的,这意味着今天对象的__str__函数返回你正在寻找的字符串。

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

简单的答案-

datetime.date.today().isoformat()

对我的回答的快速免责声明-我只学习了大约2周的Python,所以我绝不是专家;因此,我的解释可能不是最好的,我可能使用了不正确的术语。不管怎样,它来了。

我在您的代码中注意到,当您声明变量today = datetime.date.today()时,您选择使用内置函数的名称命名您的变量。

当您的下一行代码mylist.append(today)附加您的列表时,它附加了整个字符串datetime.date.today(),您之前将其设置为today变量的值,而不仅仅是附加today()

一个简单的解决方案,尽管大多数程序员在使用datetime模块时可能不会使用,是更改变量的名称。

以下是我尝试的:

import datetimemylist = []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'

您可以使用easy_date使其更容易:

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

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

from datetime import datetimenow = 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)

输出

2016-10-06 01:21:34 PM06 October 2016 01:21:34 PM2016-10-06 13:21:34

格式化字符串文字(自Python 3.6,2016-12-23)中使用特定于类型的datetime字符串格式(请参阅nk9的答案使用str.format()。):

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

日期/时间格式指令没有作为格式字符串语法的一部分记录,而是在datedatetimetimestrftime()留档中记录。它们基于1989 C标准,但包括一些自Python 3.6以来的ISO 8601指令。

import datetimeimport 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+"-"+yearprint Date

通过这种方式,您可以将日期格式化为以下示例:22-Jun-2017

from datetime import date
def today_in_str_format():return str(date.today())
print (today_in_str_format())

这将打印2018-06-23,如果这是你想要的:)

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

import datetimestr(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')]

对于那些想要基于语言环境日期而不包括时间的人,请使用:

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

在Python中,您可以使用datetime模块中datetimedatetime类中的strftime()方法格式化datetime。

在您的特定情况下,您使用的是datetime中的date类。您可以使用以下片段将today变量格式化为格式为yyyy-MM-dd的字符串:

import datetime
today = datetime.date.today()print("formatted datetime: %s" % today.strftime("%Y-%m-%d"))

下面是一个更完整的例子:

import datetimetoday = datetime.date.today()
# datetime in d/m/Y H:M:S formatdate_time = today.strftime("%d/%m/%Y, %H:%M:%S")print("datetime: %s" % date_time)
# datetime in Y-m-d H:M:S formatdate_time = today.strftime("%Y-%m-%d, %H:%M:%S")print("datetime: %s" % date_time)
# format datedate = today.strftime("%d/%m/%Y")print("date: %s" % time)
# format timetime = today.strftime("%H:%M:%S")print("time: %s" % time)
# dayday = today.strftime("%d")print("day: %s" % day)
# monthmonth = today.strftime("%m")print("month: %s" % month)
# yearyear = today.strftime("%Y")print("year: %s" % year)

更多指令:

1989 C标准中的Python strftime指令

来源:

对于时间戳熊猫图片,可以使用strftime(),例如:

utc_now = datetime.now()

对于isoforma:

utc_now.isoformat()

对于任何格式例如:

utc_now.strftime("%m/%d/%Y, %H:%M:%S")