time

常用的有time.time()time.sleep()函数。

import time

print(time.time())
1499305554.3239055

上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round函数,可以实现浮点数的四舍五入。如下

# 默认四舍五入到整数位,即不保留小数
print(round(time.time()))
# 可指定参数保留的小数位数
print(round(time.time(), 2))
1499305554
1499305554.49

time.sleep(sec)可以让当前休眠,参数填入秒(s)。

print('good')
time.sleep(5.5)
# 5.5秒后才打印这句
print('yes')
good
yes

其他一些函数的使用

# 返回UTC时间
print(time.gmtime())
# 返回本地时间,在中国就是UTC+8
print(time.localtime())
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)

可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour不一样(它们相差了刚好+8),其余都一样。

下面的函数可以返回一个格式化的日期时间,看起来更加直观。

print(time.ctime())
print(time.asctime())
# 由于使用默认参数和上面的结果一样
print(time.ctime(time.time()))
print(time.asctime(time.localtime()))
Thu Jul  6 09:46:15 2017
Thu Jul 6 09:46:15 2017
Thu Jul 6 09:46:15 2017
Thu Jul 6 09:46:15 2017
  • ctime()可以传入一个时间戳,没有指定参数时,默认使用当前时间戳作为参数。即time.time()
  • gtime()可以传入一个struct_time,没有指定参数时,默认使用当前时间。即time.localtime()

struct_time转化为字符串及字符串转为struct_time

  • strptime的第一个参数是字符串形式的日期,第二个参数是自定义的日期转换格式。这两个参数的格式一定要对应。比如time.strptime('2017/7/6', '%Y-%m-%d')一个用了斜杠,一个用了短横线,就会报错。此函数返回一个struct_time
  • strftime的第一个参数是想要转化成的日期格式,第二个参数是一个struct_time,此函数将元组形式的struct_time转化成第一个参数指定的格式样子,返回的是转化后的日期字符串形式。

%Y-%m-%d表示年月日,在datetime模块会详细介绍。

a = time.strptime('2017/7/6', '%Y/%m/%d')
b = time.strftime('%Y-%m-%d', time.localtime())
print(a)
print(b)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)
2017-07-06

测量程序的运行时间

使用时间戳可以方便地计时一段程序地运行时间

start_time = time.time()
sum = 0
for i in range(10000000):
sum += 1 end_time = time.time()
print(end_time - start_time)
2.185124397277832

可以看到执行循环计算加法一千万次,那段程序花了2秒多。

也可以使用time.clock()函数

start = time.clock()
print(start) # 2.6773594453225194e-06
time.sleep(2)
end = time.clock()
print(end - start) # 差值代表了睡眠2秒的时间。2.000246763295544
time.sleep(3)
print(time.clock()) # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
4.4622657422041984e-07
2.0026006084745567
5.013243112269714

可以看到clock第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock的值的差了。即从第一次调用开始算起,到当前调用clock所经历的时间。
像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()还要准确。

datetime

datetime模块用来管理日期和时间,其中有三个子模块。分别是time、date、datetime,所以想要使用datetime可以使用下面的导入方式。

from datetime import datetime
# 返回当前时间
now = datetime.now()
print(now.year, now.month, now.microsecond) # 可以自定义参数,返回格式化后的时间
dt = datetime(2017, 10, 1, 23, 59, 59, 456123)
print(dt)
2017 7 719609
2017-10-01 23:59:59.456123

datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond属性中。

由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()。当然反过来由datetime得到时间戳也是可以的。

# 时间戳转datetime
now = datetime.fromtimestamp(time.time())
print(now)
sometime = datetime(2017, 7, 5, 23, 59, 59)
# datetime转时间戳
print(sometime.timestamp())
2017-07-06 09:46:07.903769
1499270399.0

这些datetime对象可以使用><=符号来比较两个日期的先后。也可进行减运算,表示两个时刻的差值。比如

dt1 = datetime(2017, 5, 31)
dt2 = datetime(2017, 4, 1)
print(dt1 - dt2)
print(dt1 > dt2)
60 days, 0:00:00
True

timedelta表示一段时间

注意它不是表示一个时刻,而是一段时间。

import datetime

delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)
delta1 = datetime.timedelta(days=5, hours=2) print(delta.seconds) # 返回属性hours和seconds的和
print(delta.total_seconds()) # 只是以秒来表示这段时间
print(delta > delta1)
print(delta + delta1)
3659
1818059.234353
True
26 days, 3:00:59.234353

timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds,但是其属性却只有days、seconds、microseconds。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值

将datetime转化为字符串形式及字符串转为datetime对象

time模块也有这两个函数(见上面的例子),使用上比较累类似。

  • strptime按照指定格式将字符串形式的日期转换成datetime对象并返回。
  • strftime将一个datetime对象(比如now)根据指定的格式转换成字符串并返回。
from datetime import datetime

a = datetime.strptime('2017/7/6', '%Y/%m/%d')
b = datetime.now().strftime('%Y-%m-%d')
print(a)
print(b)
2017-07-06 00:00:00
2017-07-06

关于日期时间的格式,看下表。

格式指令 含义
%Y 带世纪的四位年份,如2017
%y 后两位年份,如17表示2017
%m 月份,从01到12
%B 完整的月份,如November
%b 月份的简写,如Nov
%d 一个月中的第几天,如从01到31(如果有的话)
%j 一年中的第几天
%w 一周中的第几天
%A 完整的周几,如Monday
%a 简写的周几,如Mon
%H 24小时制的小时00-23
%h 12小时制的小时01-12
%M 分,00-59
%S 秒,00-59
%p AM或者PM

【Python】Python的time和datetime模块的更多相关文章

  1. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  2. python五十四课——datetime模块

    3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...

  3. Python标准库笔记(3) — datetime模块

    datetime模块提供了简单和复杂的方式用于操纵日期和时间的类.虽然支持日期和时间运算,但实现的重点是为了输出格式化和操作高效地提取属性. 1. 模块内容 内容 描述 常量   datetime.M ...

  4. python初步学习-import和datetime模块

    模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...

  5. 二十三、python中的time和datetime模块

    A.time模块   1. sleep():强制等待 import timeimport datetime print("start to sleep.....")time.sle ...

  6. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  7. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  8. python中datetime模块

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块我在之前的文章已经有所介绍,它提供 的接口与C标准库time.h基本一致.相比于time模块 ...

  9. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  10. python datetime模块参数详解

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接 ...

随机推荐

  1. Swift3.0字符串大小写转化

    Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的转换是很费时的.在NSString中提供了 ...

  2. 1135: [POI2009]Lyz

    1135: [POI2009]Lyz https://lydsy.com/JudgeOnline/problem.php?id=1135 分析: hall定理+线段树连续区间的最大的和. 首先转化为二 ...

  3. 暗通道去雾算法的python实现

    何凯明博士的去雾文章和算法实现已经漫天飞了,我今天也就不啰里啰唆,直接给出自己python实现的完整版本,全部才60多行代码,简单易懂,并有简要注释,去雾效果也很不错. 在这个python版本中,计算 ...

  4. Unity CombineTexture

    public Texture2D CombineTexture(Texture2D background, Texture2D top) { int width = background.width; ...

  5. JS基础循环语句练习

    最近这几天一直在做题做题做题,很恶心,很头疼,都快吐了,但是自己的逻辑还是初见成效的,很久不动脑了,有点锈住了,大家也一起来开发下自己的大脑 有关简单排序的小循环 <script> var ...

  6. pytest使用笔记(一)

    使用环境及预置条件:pycharm+win10+python3.6+pytest 1,创建示范的测试功能脚本,另存为test_sample.py,代码如下: # test_sample.py def ...

  7. 【CentOS】安装Docker教程

    前提条件 Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位 ...

  8. HDU-4055:Number String

    链接:HDU-4055:Number String 题意:给你一个字符串s,s[i] = 'D'表示排列中a[i] > a[i+1],s[i] = 'I'表示排列中a[i] < a[i+1 ...

  9. html的背景样式图片

    背景图片 如果背景图片小于当前的div的情况下 默认的是将平铺充满元素 background-image 设置背景图片. background-repeat 设置是否及如何重复背景图片. repeat ...

  10. STC 单片机ADC实现原理

    模数转换器原理 数模转换器( analog to digitI converter,ADC),简称为A/D,ADC是链接模拟世界和数字世界的桥梁.它用于将连续的模拟信号转换为数字形式离散信号.典型的, ...