How to print a date in a regular format?
这是我的代码:
1 2 3 | import datetime today = datetime.date.today() print today |
这张照片是:2008-11-22,这正是我想要的,但是……我有一个列表,我把它附加在上面,然后突然一切都变得"不稳定"。代码如下:
1 2 3 4 5 | import datetime mylist = [] today = datetime.date.today() mylist.append(today) print mylist |
打印以下内容:
1 | [datetime.date(2008, 11, 22)] |
我到底怎么才能得到一个简单的约会,比如"2008-11-22"?
为什么:日期是对象
在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)' 。
发生的是,当您使用"打印"打印日期时,它使用
好吧,当您操作日期时,请一直使用日期对象。他们有上千种有用的方法,而大多数python API都希望日期是对象。
当您想显示它们时,只需使用
最后一件事。当您试图打印日期时,您打印了
例如,您要在列表中打印所有日期:
1 2 | for date in mylist : print str(date) |
请注意,在这种特定情况下,您甚至可以省略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 |
高级日期格式
日期具有默认表示形式,但您可能希望以特定格式打印它们。在这种情况下,可以使用
例如:
1 2 | print today.strftime('We are the %d, %b %Y') >>> 'We are the 22, Nov 2008' |
%d 为日数%m 是月份号%b 是月份的缩写。%y 是最后两位数的年份。%y 为全年
等
看一看官方文件,或者麦考肯的快速参考文件,你不可能完全了解它们。
自PEP3101以来,每个对象都可以有自己的格式,由任何字符串的方法格式自动使用。对于日期时间,格式与STRFTIME。所以你可以这样做:
1 2 | print"We are the {:%d, %b %Y}".format(today) >>> 'We are the 22, Nov 2008' |
此表单的优点是您还可以同时转换其他对象。随着格式化字符串文字的引入(自python 3.6,2016-12-23以来),这可以写成
1 2 3 | import datetime f"{datetime.datetime.now():%Y-%m-%d}" >>> '2017-06-15' |
国产化
如果你使用正确的方式,日期可以自动适应当地的语言和文化,但这有点复杂。可能是关于so的另一个问题(堆栈溢出);-)
1 2 | import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") |
编辑:
在CEES建议之后,我也开始使用时间:
1 2 | import time print time.strftime("%Y-%m-%d %H:%M") |
日期、日期时间和时间对象都支持strftime(format)方法,在显式格式控制下创建表示时间的字符串字符串。
这是一个格式代码列表,其中包含它们的指令和含义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | %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中的日期时间和时间模块做的事情。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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") |
它将打印出如下内容:
1 2 3 4 5 6 7 8 9 10 | 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 |
使用date.strftime。格式化参数在文档中进行了描述。
这是你想要的:
1 | some_date.strftime('%Y-%m-%d') |
这个方法考虑了区域设置。(这样做)
1 | some_date.strftime('%c') |
这是较短的:
1 2 3 | >>> import time >>> time.strftime("%Y-%m-%d %H:%M") '2013-11-19 09:38' |
1 2 3 4 5 6 7 8 9 10 11 | # 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) |
OUTPUT
1 2 3 | 2016-10-06 01:21:34 PM 06 October 2016 01:21:34 PM 2016-10-06 13:21:34 |
甚至
1 2 3 | from datetime import datetime, date "{:%d.%m.%Y}".format(datetime.now()) |
2013年12月25日
或
1 | "{} - {:%d.%m.%Y}".format("Today", datetime.now()) |
out:'今天-2013年12月25日'
1 | "{:%A}".format(date.today()) |
out:'星期三'
1 | '{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now()) |
输出:"主日志2014.06.09"
简单答案
1 | datetime.date.today().isoformat() |
在格式化字符串文字(自python 3.6,2016-12-23以来)中使用特定于类型的
1 2 3 | >>> import datetime >>> f"{datetime.datetime.now():%Y-%m-%d}" '2017-06-15' |
日期/时间格式指令不作为格式字符串语法的一部分记录,而是记录在
您需要将日期时间对象转换为字符串。
以下代码适用于我:
1 2 3 4 5 | import datetime collection = [] dateTimeString = str(datetime.date.today()) collection.append(dateTimeString) print collection |
如果你还需要帮助,请告诉我。
你可以做到:
1 | mylist.append(str(today)) |
您可能想将其附加为字符串?
1 2 3 4 5 | import datetime mylist = [] today = str(datetime.date.today()) mylist.append(today) print mylist |
由于
所以你也可以做
我讨厌为了方便而导入太多模块的想法。我更愿意使用可用的模块,在本例中是
1 2 3 | >>> a = datetime.datetime(2015, 04, 01, 11, 23, 22) >>> a.strftime('%Y-%m-%d %H:%M') '2015-04-01 11:23' |
1 2 3 4 | from datetime import date def time-format(): return str(date.today()) print (time-format()) |
如果您愿意的话,这将于2018年6月23日印刷。
考虑到你要求做一些简单的事情,你可以:
1 2 | import datetime str(datetime.date.today()) |
我不完全理解,但可以使用
1 2 3 4 5 6 7 8 9 10 | >>> 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 >>> |
还有:
1 2 3 4 5 6 7 8 | >>> 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'] |
但它存储字符串,但易于转换:
1 2 3 | >>> l=list(map(str,l)) >>> list(map(pd.to_datetime,l)) [Timestamp('2018-10-07 00:00:00')] |
您可以使用简单的日期来简化:
1 2 | import date_converter my_date = date_converter.date_to_string(today, '%Y-%m-%d') |
以下是如何将日期显示为(年/月/日):
1 2 3 4 | from datetime import datetime now = datetime.now() print '%s/%s/%s' % (now.year, now.month, now.day) |
我的答案很快就免责了——我只学了大约2周的Python,所以我绝对不是专家;因此,我的解释可能不是最好的,我可能会使用不正确的术语。不管怎样,这就是问题所在。
我在代码中注意到,当您声明变量
当您的下一行代码
一个简单的解决方案是更改变量的名称,尽管大多数编码人员在使用datetime模块时可能不会使用它。
以下是我的尝试:
1 2 3 4 5 | import datetime mylist = [] present = datetime.date.today() mylist.append(present) print present |
它打印了
1 2 3 4 5 6 7 8 9 10 11 12 | 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日