• 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

    却道,此心安处是吾乡
  • 相关阅读:
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程--课程实验3
    深入理解系统调用 -- 课程实验2
    基于mykernel 2.0编写一个操作系统内核--课程实验1
    如何评测软件工程知识技能水平?
    如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
    创新产品的需求分析:未来的图书是什么样的
    构建调试Linux内核网络代码的环境MenuOS系统
    php db2 返回当前insert记录的自增id
  • 原文地址:https://www.cnblogs.com/lucifer25/p/5819865.html
Copyright © 2020-2023  润新知