获取当前日期和时间:
>>> from datetime import datetime >>> print(datetime.now()) 2019-07-18 15:16:55.283423获取指定日期和时间
要指定某个日期和时间,我们直接用参数构造一个datetime:
>>> from datetime import datetime >>> print(datetime(1999,9,9,9,9,9)) 1999-09-09 09:09:09 >>> print(datetime(1999,9,9)) 1999-09-09 00:00:00 >>> print(datetime(1999,9)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: function missing required argument 'day' (pos 3) # 获取指定时间,至少需要三个参数及年月日datetime转换为timestamp
在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。
>>> from datetime import datetime >>> datetime.now().timestamp() 1563434713.415836 >>> datetime(1999,9,9,9,9,9).timestamp() 936839349.0timestamp转换为datetime
要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法:
>>> from datetime import datetime >>> datetime.fromtimestamp(936839349.0) datetime.datetime(1999, 9, 9, 9, 9, 9) >>> print(datetime.fromtimestamp(936839349.0)) 1999-09-09 09:09:09 >>> print(datetime.utcfromtimestamp(936839349.0)) 1999-09-09 01:09:09 # fromtimestamp 转化为本地时间,北京时间,UTC+8:00时区的时间 # utcfromtimestamp 转化为格林威治标准时间,UTC+0:00时区的时间str转换为datetime
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:
>>> from datetime import datetime >>> cday = datetime.strptime('1999-9-9 09:09:09', '%Y-%m-%d %H:%M:%S') >>> print(cday) 1999-09-09 09:09:09datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:
>>> from datetime import datetime >>> print(datetime.now().strftime('%a, %b %d %H:%M')) Thu, Jul 18 15:41 >>> print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 2019-07-18 15:42:21 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身datetime加减
对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+和-运算符,不过需要导入timedelta这个类:
>>> from datetime import datetime, timedelta >>> now = datetime.now() >>> now datetime.datetime(2019, 7, 18, 15, 53, 18, 296842) >>> now + timedelta(hours=10) datetime.datetime(2019, 7, 19, 1, 53, 18, 296842) >>> now + timedelta(days=-10) datetime.datetime(2019, 7, 8, 15, 53, 18, 296842) >>> now + timedelta(days=2,hours=3) datetime.datetime(2019, 7, 20, 18, 53, 18, 296842) >>> now - timedelta(years=10) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'years' is an invalid keyword argument for __new__() # timedelta 不能对年份进行加减