概述
Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。
time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。
datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体关系如下:
object
timedelta # 主要用于计算时间跨度
tzinfo # 时区相关
time # 只关注时间
date # 只关注日期
datetime # 同时有时间和日期
在实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。
time
时间
timestamp = time.time() # 返回当前时间戳,秒,1414332433.345712
tm = time.localtime() # time.struct_time(tm_year=2017, tm_mon=8, tm_mday=19, tm_hour=23, tm_min=38, tm_sec=53, tm_wday=5, tm_yday=231, tm_isdst=0)
tm.tm_year tm.tm_mon ...
time.ctime() time.ctime(time.time()+15) 返回可视化时间(字符串)
睡眠
调用sleep()会从当前线程交出控制,要求它等待系统将其再次唤醒。如果程序只有一个线程,这实际上就会阻塞应用,什么也不做。
time.clock()返回处理器时钟时间,性能测试/基准测试等,反映程序使用时间(float)
time.sleep(i)睡i秒,睡眠不会影响clock()值。
datetime
datetime.datetime
----------
类方法:
datetime.datetime(2017, 1, 1)
now = datetime.datetime.now(tz) # tz参数可有可无,返回现在的日期时间datetime.datetime(2017, 8, 19, 22, 39, 53, 861017)
now = datetime.datetime.today() # 无参数datetime.datetime(2017, 8, 19, 23, 52, 37, 242857)
datetime.utcnow() # UTC 时间
datetime.fromtimestamp(timestamp[, tz]) # 由 Unix Timestamp 构建对象
datetime.strptime(date_string, format) # 给定时间格式解析字符串
----------
实例方法:
now.year now.month now.day now.hour now.minute now.second now.microsecond
now.max now.min now.resolution # 改类型的最大值、最小值、精确度
now.weekday() # 返回今天周几(0~6,0为周一,6为周日)
now.isocalendar() # (2017, 33, 6)周一为起始点,能顺利解决跨年问题,年处的归为上一年未满的周
now.isoweekday() # 1-7周一到周日
now.isoformat() # '2017-08-19'
now.date() # 返回 date 对象datetime.date(2017, 8, 19)
now.time() # 返回 time 对象datetime.time(22, 40, 56, 372702)
now.replace(name=value) # 前面所述各项属性是 read-only 的,需要此方法才可更改
now.timetuple() # 返回time.struct_time 对象
now.strftime(format) # 按照 format 进行格式化输出
datetime.timedelta
# 实例化
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
span = now2 - now1 # datetime.timedelta(0, 265, 507353)
span.days span.seconds span.microseconds
now.max now.min now.resolution
span.total_seconds() # 该时间差的总秒数,以秒为单位的float类型
‘用时: {:02d}:{:02d}’.format(timespan.seconda / 60, timespan.seconds % 60)
datetime.date
像是datetime.datetime的缩小版,方法跟now的一样
today = datetime.date.today() # datetime.date(2017, 8, 19)
today.year today.month now.day
today.weekday()
today.isocalendar() # (2017, 33, 6)周一为起始点,能顺利解决跨年问题,年处的归为上一年未满的周
today.isoweekday() # 1-7周一到周日
today.isoformat() # '2017-08-19'
按格式输出字符串
由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()
两个函数都涉及日期间的格式化字符串http://blog.csdn.net/shomy_liu/article/details/44141483
官方文档https://docs.python.org/2.7/library/datetime.html
列举如下:
‘%Y-%m-%d %H:%M:%S’
%w 当天在当周的天数,范围为[0, 6],6表示星期天
%y两位表示年
%I 12进制表示小时 %P 返回是上午还是下午–AM or PM
%W 返回当周是当年的第几周 以周一为第一天
%j 返回 当天是当年的第几天 范围[001,366]
from dateutil.parse import parser
parser(‘2001-02-02’)将格式化的字符串自动识别转化为日期
dateutil
PACKAGE CONTENTS
_common
easter
parser
relativedelta
rrule
tz (package)
tzwin
zoneinfo (package)
calendar
from calendar import monthrange
now + timedelta(days=monthrange(start.year,start.month)[1])
business_calendar
如果有需要计算工作日的需求,可以使用 business_calendar这个库
参考
http://www.jb51.net/article/75364.htm
http://www.cnblogs.com/lhj588/archive/2012/04/23/2466653.html