本篇共2部分,上篇我们初步探讨Python时间运算的机制,下篇为一句话快速运用Python的datetime进行时间运算的技巧。
Python时间运算的详细机制初探讨
我们先来看一张图:
import time
导入时间模块;
In [5]: time.strptime('20161009','%Y%m%d')
Out[5]: time.struct_time(tm_year=2016, tm_mon=10, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_
通过time.strptime()
将普通字符时间转换为时间元祖,注意这两者在转换时需要指定字符时间的格式(%Y%m%d
这里只用到了年月日);
In [6]: time.mktime(time.strptime('20161009','%Y%m%d'))
Out[6]: 1475942400.0
通过time.mktime
将上一步的时间元祖转换为时间戳,也就是1970年0时0分0秒到20161009的0时0分0秒为止,过了多少秒;
In [7]: time.localtime(1475942400.0)
Out[7]: time.struct_time(tm_year=2016, tm_mon=10, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yd
通过 time.localtime
将时间戳转换为时间元祖;
In [13]: time.strftime('%Y%m%d',time.localtime(1475942400.0))
Out[13]: '20161009'
通过
time.strftime
将时间元祖复原为普通字符时间,同样注意需要指定字符时间的格式。
附:字符时间常用格式
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%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.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale's equivalent of either AM or PM.
一句话快速进行python时间运算的技巧
1、python快速求值当前时间
当前的天数、当前的时间
In [1]: from datetime import datetime, timedelta, date
In [2]: (datetime.now()).strftime('%Y%m%d')
Out[2]: '20161009'
In [3]: (datetime.now()).strftime('%Y/%m/%d %H:%M:%S')
Out[3]: '2016/10/09 16:57:12'
同上,当前的周数、月份、上下午等都可以通过后面的格式化字符求出。例如,
%a
代表英文周几,%b
代表月份,%p
代表AM/PM等,更多的参考下图:
2 、python快速时间运算
python周数运算、天数运算、小时运算、秒数运算、毫秒运算、微秒运算
In [5]: (datetime.now()-timedelta(days=1)).strftime('%Y%m%d') # 1天前,N天前
Out[5]: '20161008'
In [6]: (datetime.now()-timedelta(hours=1)).strftime('%Y/%m/%d %H:%M:%S') # 1小时前,n小时前
Out[6]: '2016/10/09 16:00:02'
同上,weeks表示周为单位,second表示秒为单位,milliseconds表示毫秒为单位, microseconds微秒为单位。
其实就是给 timedelta() 这个类传入的参数变一下就可以了:
可传入的参数有 timedelta(weeks, days, hours, second, milliseconds, microseconds) 每个参数都是可选参数,默认值为0,参数值必须是这些(整数,浮点数,正数,负数)。
原文发布时间为:2017-02-28
本文作者:刘布丁
本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号