Python里的时间

在系统的学习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 - 该月的第几天(0131)
  • %D - 类似 %m/%d/%y
  • %e - 该月的一天(131)
  • %g - 类似于%G,但是没有世纪
  • %G - 对应于ISO周数4位数的年份(参见%V)
  • %h - 类似于 %b
  • %H - 小时,使用24小时制(0023)
  • %I - 小时,使用12小时制(0112)
  • %j - 一年中的哪一天(001366)
  • %m - 月份(0112)
  • %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

posted @ 2016-08-29 22:07  plantree  阅读(237)  评论(0编辑  收藏  举报