【第十三天】Python中有关时间的模块

5.2

1.time包

计算机可以用来计时,从硬件上来说,计算机主板上有一个计时的表
我们可以手动或者根据网络时间来调表,这块表有自己的电池
所以即使断电,表也不会停,在硬件基础上
计算机可以提供挂钟时间(Wall Clock Time)
挂钟时间是从某个固定时间起点到现在的时间间隔
对于UNIX系统来说,起点时间是1970年1月1日0点0分0秒
其他日期时间都是从挂钟时间计算得到的,此外
计算机还可以测量CPU实际运行时间,也就处理器时间(Processor Clock Time)
以测量计算机性能,当CPU处于闲置状态时,处理器时间会暂停

我们能通过py编程来管理时间和日期,标准库time包提供了基本的时间功能
下面使用time包:

import time
print(time.time())     #挂钟时间,单位是秒

还能借助模块time测量程序运行时间,比如:

import time
start = time.clock()
for i in range(100000):
    print(i**2)
end = time.clock()
print(end - start)       #打印19.904038,即CPU运行时间

上面的程序调用了两次clock()方法,从而测量镶嵌其间的程序所用的时间
在不同的计算机系统上,clock()的返回值会有所不同,在UNIX系统上
返回的是处理器时间,当CPU处于闲置状态时,处理器时间会暂停
因此我们获得的是CPU运行时间,在windows系统上,返回的则是挂钟时间

方法sleep()可以让程序休眠,根据sleep()接受到的参数
程序会在某时间间隔之后醒来继续运行:

import time
print("start")
time.sleep(10)     #休眠10秒
print("wake up")

time包还定义了struct_time对象,该对象将挂钟时间转换为年,月,日,时,分,秒等
储存在该对象的各个属性中,比如tm_year,tm_mon,tm_mday......
下面几种方法可以将挂钟时间转换为struct_time对象:

st = time.gmtime()           #返回struct_time格式的UTC时间

st = time.localtime()        #返回struct_time格式的当地时间,当地时区根据系统环境决定

我们也可以反过来,把一个struct_time对象转换为time对象:

s = time.mktime(st)          #将struct_time格式转换成挂钟时间

2.datetime包

datetime包是基于time包的一个高级包,用起来更加便利
datetime可以理解为date和time两个部分组成
date是指年月日构成的日期,相当于日历,time是指时分秒毫秒
构成的一天24个小时中的具体时间,提供了与手表类似的功能
因此,datetime模块下有两个类:datetime.date类和datetime.time类
你也可以把日历和手表合在一起使用,即直接调用datetime.datetime类
这里只介绍综合性的datetime.datetime类,单独的datetime.date类和datetime.time类与之类似

一个时间点,比如2012年9月3日21时30分,我们可以用如下方式表达:

import datetime

t = datetime.datetime(2012,9,3,21,30)
print(t)
2012-09-03 21:30:00

对象t具有如下属性:
hour,minute,second,millisecond,microsecond
小时,分,秒,毫秒,微秒
year,month,day,weekday
年,月,日,星期几

借助datetime包,我们还可以进行时间间隔的运算
它包含一个专门代表时间间隔对象的类,即timedelta
一个datetime.datetime的时间点加上一个时间间隔
就可以得到一个新的时间点,比如今天的上午3点加上5个小时
就可以得到一个时间间隔:

import datetime

t = datetime.datetime(2012,9,3,21,30)
t_next = datetime.datetime(2012,9,5,23,30)
delta1 = datetime.timedelta(seconds = 600)
delta2 = datetime.timedelta(weeks = 3)

print(t + delta1)        #打印2012-09-03 21:40:00
print(t + delta2)        #打印2012-09-24 21:30:00
print(t_next - t)        #打印2 days, 2:00:00

在给datetime.timedelta传递参数时,除了上面的秒(seconds)
和星期(weeks)外,还可以是天(days),小时(hours),毫秒(milliseconds)
微秒(microseconds)

两个datetime对象能进行比较运算,以确定哪个时间间隔更长
比如使用的t和t_next:

print(t>t_next)          #打印False

3.时间格式

对于包含有时间信息的字符串来说,我们可以借助datetime包
把它转换为datetime类的对象,比如:

from datetime import datetime

str = "output-1997-12-23-030000.txt"
format = "output-%Y-%m-%d-%H%M%S.txt"
t = datetime.strptime(str,format)
print(t)                 #打印1997-12-23 03:00:00

包含有时间信息的字符串是"output-1997-12-23-030000.txt"
是一个文件名,字符串format定义了一个格式
这个格式中包含了几个由%引领的特殊字符,用来代表不同时间信息
%Y表示年份,%m表示月,%d表示日,%H表示24小时制的小时,%M表示分,%S表示秒
通过strptime方法,py会把需要解析的字符串往格式上凑
比如说,在格式中%Y的位置,正好看到"1997",就认为1997是datetime对象t的年
以此类推,就从字符串中获得了t对象的时间信息

反过来,我们也可以调用datetime对象的strftime方法
将一个datetime对象转换为特定格式的字符串,比如:

from datetime import datetime

format = "%Y-%m-%d %H:%M"
t = datetime(2012,9,5,23,30)
print(t.strftime(format))     #打印2012-09-05 23:30

可以看到,格式化转化的关键是%号引领的特殊符号
这些特殊符号有很多种,分别代表不同的时间信息,常用的特殊符号还有:

%A:表示英文的星期几,如Sunday,Monday...
%a:简写的英文星期几,如Sun,Mon...
%I:表示小时,12小时制
%p:上午或者下午,即AM或PM
%f:表示毫秒,如2,0014,000001

但如果想在格式中表达%这个字符本身,而不是特殊符号,那么可以使用%%

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容