在系统的学习python的过程中,并没有接触到时间这个模块,但是在之后学习python的相关应用时,就接触到了,而且还很常见,比方说在用matplotlib里的finance模块从雅虎财经获得相关公司股票数据后,进行有关的分析,就要用到时间。很多数据其实都是有时间属性的,以后估计听常用,况且python的时间模块不仅齐全,语法也不复杂,只是有些繁琐,要记忆的东西挺多,这里就简单记录一下,也方便以后的查看。
Python里的时间相关的模块,主要有两个,一个是time模块,还有一个是datetime模块,两者用法上有些重叠,但具体的使用又有些不同。照我浅显的经验,time模块处理的时间可以细化到微秒,而datetime模块则是处理到天,专业点的说,就是time的粒度更小。
直接看例子。
Time模块
Example1
# 先导入有关模块 import time print 'time.time()', time.time() |
Time的time方法返回的是当前时间的时间戳(1970纪元后经过的浮点秒数)
print 'time.localtime(time.time())', time.localtime(time.time()) |
而localtime方法则是可以将秒数转化为一个九元组,何为九元?
在python中是这个样子的
看结果也是很清楚的
print 'time.asctime(time.localtime(time.time()))', time.asctime( time.localtime(time.time())) |
asctime方法可以将一个结构化的时间转换为一个格式化的时间
结果是这个样子,格式为星期、月、日、时、分、秒、年
ctime方法同样可以,只是它的参数是秒数
print time.ctime(time.time()) |
结果与上面的是一样的
localtime、asctime和ctime不用参数也都是可以的
Example2
print 'date.fromtimestamp()', date.fromtimestamp(time.time()) |
fromtimestamp可以将一个秒数转换成 年-月-日的格式
struct_time = time.strptime('2008-02-14', '%Y-%m-%d') print struct_time |
strptime()方法分析根据格式的时间字符串解析出其他的时间信息,返回的也是一个九元组,语法为
具体的format有这些:
- %a - 简写的星期几
- %A - 完整的星期几
- %b - 缩写的月份名称
- %B - 完整的月份名称
- %c - 首选日期和时间表示
- %C - 世纪值(年份除以100,范围从00到99)
- %d - 该月的第几天(01〜31)
- %D - 类似 %m/%d/%y
- %e - 该月的一天(1〜31)
- %g - 类似于%G,但是没有世纪
- %G - 对应于ISO周数4位数的年份(参见%V)
- %h - 类似于 %b
- %H - 小时,使用24小时制(00〜23)
- %I - 小时,使用12小时制(01〜12)
- %j - 一年中的哪一天(001〜366)
- %m - 月份(01〜12)
- %M - 分钟
- %n - 换行符
- %p - 根据给定的时间值am或pm
- %r - 时间在上午和下午的符号:am/pm
- %R - 时间以24小时制
- %S - 秒
- %t - 制表符
- %T - 当前时间,等于 %H:%M:%S
- %u - 工作日为数字(1到7),星期一= 1。警告:在Sun Solaris上周日=1
- %U - 当年的周数,第一个星期日作为第一周的第一天
- %V - 本年度ISO 8601的周数(01到53),其中,第1周是在本年度至少4天的第一个星期,星期一作为一周的第一天
- %W - 当年的周数,与第一个星期一作为第一周的第一天
- %w - 星期为一个小数,星期日=0
- %x - 没有时间的日期表示
- %X - 无日期首选的时间表示
- %y - 一年无世纪(范围从00到99)
- %Y - 今年,包括世纪
- %Z or %z - 时区或名称或缩写
- %% -文字%字符
结果是这样的
最常用的还是要数strftime,常用于时间的转换
t = time.localtime() strftime_time = time.strftime('%Y-%m-%d', t) print strftime_time |
strftime接受的参数必须是格式化的九元组时间,输出的格式自定义,具体的格式与strptime相同
结果如下:
clock返回当前CPU时间为几秒钟的浮点数。以测量不同方法的计算成本,time.clock的值比time.time()更有用
print time.clock() a = 1 + 1 print time.clock() |
第二个clock返回的是相较于第一个clock的时间间隔,在评价算法时间的时候比较有效
Datatime模块(datatime模块中经常使用的是data子模块)
Example1
首先导入相关库,看两个简单的例子
print 'date.max', date.max print 'date.min', date.min |
输出结果是这样的
显示的是python支持的时间范围
Example2
data模块中最重要的,是today方法,返回的是年-月-日格式的系统时间
print 'date.today', date.today() |
datetime对象有很多函数和属性,使用起来也不复杂,可以用help(datetime)查看
now = date.today() print now.strftime('%d-%m-%Y') print 'now.year', now.year print 'now.month', now.month print 'now.day', now.day |
Strftime也是转换格式的,和time模块里的是一样的,format也是一样的,year、month、day属性分别返回年月日
Replace方法可以修改相关属性
tomorrow = now.replace(day = 25) nextmonth = now.replace(month = 9) print 'tomorrow', tomorrow, 'nextmonth', nextmonth |
Timetuple()方法返回的是一个九元祖时间,toordinal()返回的与time.time()一样,是一个秒数,weekday()与isoweekday()的不同在于weekday()的范围是0-6,而isoweekday()范围是1-7,isocalendar()官方解释是Return a 3-tuple containing ISO year, week number, and weekday.,isoformat()返回年-月-日这样的标准格式
print 'date.timetuple()', now.timetuple() print 'date.toordinal():', now.toordinal() print 'date.weekday():', now.weekday() print 'date.isoweekday():', now.isoweekday() print 'date.isocalendar():', now.isocalendar() print 'date.isoformat():', now.isoformat() |
Example3
Python里的时间是可以进行计算的,比如说相加相减,最常用的是时间差
now = date.today() tomorrow = now.replace(day = 30) delta = tomorrow - now print 'timedelta', delta print 'now + delta = tomorrow:', now + delta |
总结:python里的时间用的虽然不多,但是到了某些场合,价值还是很大的,多掌握一些肯定没有什么坏处,何况整理出来,以后万一哪个地方记得不清楚可以直接查看自己的博客,就省去了在别人博客里翻找的时间。
我发现,在学习这些的时候,python帮助文档简洁明了,但又不好理解,看别人的博客,长是长了些,但有例子,比较生动,两者结合,甚好
主要参考一下网站:
http://www.yiibai.com/python/python_date_time.html
http://blog.csdn.net/wirelessqa/article/details/7973121