全部博文(2065)
分类: Python/Ruby
2010-03-04 13:43:56
python中时间整理专题
[时间:
经常会用到时间处理,现在整理出来以备将来的查找使用!
一、time 模块使用整理
提供了各种操作时间的函数。一般有两种表示的方式:
第一种:以时间戳的方式(相对于1970.1.1 00:00:00 以秒计算的偏移量),时间戳是惟一
第二种:以数组的形式表示即(struct_time), 共有九个元素,分别表示,同一个时间戳的stuct_time会因为时区不同而不同。
时区:夏令时区与UTC时区
1.1 函数介绍:
asctime([tuple]) -> string
将一个struct_time 转换成字符串
该函数有两个功能,
在第一次调用的时候,返回的是程序运行的实际时间;(返回整个程序的总运行时间值)
以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔
示例:
import time
if __name__ == '__main__':
time.sleep(1)
print "clock1:%s" % time.clock()
time.sleep(1)
print "clock1:%s" % time.clock()
time.sleep(1)
print "clock1:%s" % time.clock()
输出:
clock1:3.07301626324e-006
clock1:0.997576228264
clock1:1.99513653272
(从第一次调用到它总共的时间值)
线程推迟指定的时间运行,经过测试,单位为秒
ctime(seconds) -> string
将一个时间戳(默认为当前时间)转换成一个时间字符串.
示例:
if __name__ == '__main__':
print
time.ctime()
输出:Thu Mar 04 12:55:03 2010
gmtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour,
tm_min,tm_sec, tm_wday, tm_yday, tm_isdst)(9个参数值)将一个时间戳转换成一个UTC时区(0时区)的struct_time,如果seconds参数未输入,则以当前时间为转换标准(数组类型的时间值)
示例:
if __name__ == '__main__':
print
time.gmtime() 时间元组
输出:
(2010, 3, 4, 4, 58, 53, 3, 63, 0)
返回的就是一个数组类型的数据。
其中的含义分别为:
(tm_year, tm_mon, tm_day, tm_hour, tm_min,tm_sec,
tm_wday, tm_yday, tm_isdst)
得到一个数组之后就可以这样分割:print time.gmtime()[0] 得到第一个元素值
localtime([seconds]) -> (tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)
将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准
PS:其中的seconds表示的是一个时间戳值。会转换成一个时间的时间数组值出来!
示例:
if __name__ == '__main__':
print
time.localtime()
输出:
(2010, 3, 4, 13, 3, 40, 3, 63, 0) 结果与上面的一样哦!
OK!以上我们介绍了常用的将时间戳值转换成一个数组struct_time 现在反过来!
mktime(tuple) -> floating point number
将一个以struct_time转换为时间戳。正好与上面的转换反过来
示例:
if __name__ == '__main__':
tuples = (2010, 3, 4, 13, 3, 40, 3, 63, 0)(时间元组)
print time.mktime(tuples) (返回时间戳)
输出:
1267679020.0
PS:至此我总结了一下time模块会用两种方法表示时间一个是时间戳(以秒为单位)、另外一个就是时间元组即格式为:
(tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)
的时间元组。然后我们介绍了一下这两种类型之间的转换处理。如何将时间戳的值转换成一个元组。
通过取到的时间戳的值就可以很容易地获取当前的时间信息了。包括年份、月份之类的!
strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
(会将一个元组按照指定的格式输出来!)
格式可选如下:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
示例:
if __name__ == '__main__':
tuples = (2010, 3, 4, 13, 3, 40, 3, 63, 0)
print
time.strftime("%Y-%m-%d",tuples) #格式可以自定义出来!格式化时间元组
输出:
strptime(string, format) -> struct_time
将时间字符串根据指定的格式化符转换成数组形式的时间
PS:正好与上面的相反过来哦!一个是由时间元组转化成字符串,另外一个就是将字符串转换成时间元组
示例:strs = "
print
time.strptime(strs, "%Y-%m-%d")
输出:(2010, 3, 4, 0, 0, 0, 3, 63,
-1)
PS:这样就可以将一个字符串转换成一个时间元组类型输出!
time() -> floating point number
返回当前时间的时间戳
示例:print time.time() 时间戳
返回:1267679986.85
PS:总结
通过time() 函数就可以获取到当前的时间戳。然后再借助于其他的格式化或转换函数就可以轻松获取其转换成的时间元组出来。反正就是时间戳与时间元组之间的相互转换
有关time模块的应用示例
一、获取当前时间
PS:当前时间有三种形式。时间戳、时间元组、字符串
代码:
print time.time() 返回时间戳
print time.localtime() 返回时间元组
print time.ctime() 返回字符串
二、格式化输出
strftime(format[, tuple]) -> string
示例:print
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
输出:2010-03-04 13:32:45
将一个元组格式化输出来!
二、DateTime模块
相关联的模块还有time与calendar 其中的time我们上面已经做了整理。呆会再整理下日历
相比time模块来讲的话这个模块在运算上更加方便一点。现在整理一下其帮助文档上面的内容出来
构造方法:
datetime(year,month,day,[hour[,minute[,second[,microsecond[,tzinfo]]]]])
参数说明:
·
MINYEAR <= year <=
MAXYEAR
·
1 <= month <= 12
·
1 <= day <= number of
days in the given month and year
·
0 <= hour < 24
·
0 <= minute < 60
·
0 <= second < 60
·
0 <= microsecond <
1000000
相关类方法整理
1、today() 返回当前的本地时间值
if __name__ == '__main__':
datetimes = datetime.datetime(2001,12,2)#构造方法参数要指明正确哦
print
datetimes.today()
返回:2010-03-04 14:40:51.783000 #即为当前的时间值了
2、now([tz])
示例:
if __name__ == '__main__':
datetimes = datetime.datetime(2001,12,2)
print
datetimes.now()
输出:2010-03-04 14:43:09.127000
如果没指定参数即表示当前的时间值!
3、strptime(date_string,format)
格式化输出一个时间值!
看下这个类的属性(只读属性)
Year 返回指定的时间的年份
if __name__ == '__main__':
datetimes = datetime.datetime(2001,12,2)
print
datetimes.year
返回:2001
相应的还有:month、day、hour、minute、second、microsecond、tzinfo
实例方法
Date() 返回一个日期对象其格式为 year,month,day
示例:
if __name__ == '__main__':
datetimes = datetime.datetime(2001,12,2)
print
datetimes.date()
输出:
Time() 返回一个time对象 格式为00:00:00形式的
示例:
if __name__ == '__main__':
datetimes = datetime.datetime(2001,12,2)
print
datetimes.time()
输出:00:00:00
常用例子
1、 计算两个指定时间之间相差的时间值方面
Demo1:
import datetime
d1 = datetime.datetime(2005,12,31)
d2 = datetime.datetime(2004,12,31)
print (d1 -
d2).days
输出:365
Demo2: 返回一段程序执行的时间
import datetime,time
begin = datetime.datetime.now()
time.sleep(5)
begins = datetime.datetime.now()
print "time is ",(begins - begin).seconds
输出:5
Demo3: 返回一个时间差值的另一个时间点
import datetime,time
begin = datetime.datetime.now()
print begin
d3= begin +
datetime.timedelta(hours = 2)
print d3
输出:表示相隔两个小时的时间值
Demo4: 时间与字符类型相互转换
import datetime,time
dt_obj = datetime.datetime(2008, 11, 10, 17, 53, 59)
date_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S")
print date_str
输出:2008-11-10
17:53:59
PS:可以实现格式化输出一段时间值!
未完
1. 时间类型相互转换
1.1 由datetime时间类型转换成str类型
dt_obj = datetime.datetime(2008, 11, 10, 17, 53, 59)
print type(dt_obj)#
date_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S")
print
type(date_str)#
这样就可以实现将datetime转换成字符串类型!
1.2 时间元组转换成字符串
time_tuple = (2008, 11, 12, 13, 51, 18, 2, 317, 0) #元组
date_str = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple)
print
date_str,type(date_str) #
1.3 时间元组转换成datetime类型
time_tuple = (2008, 11, 12, 13, 51, 18, 2, 317, 0)
dt_obj =
datetime.datetime(*time_tuple[0:6])
print
repr(dt_obj),type(dt_obj),dt_obj
#
将时间元组转换成datetime类型的数据
1.4 将字符串转换成datetime类型
date_str = "2008-11-10 17:53:59" #指定的字符串值
dt_obj =
datetime.datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print
type(dt_obj),dt_obj
输出:
PS:这里面我们其实就可以做一次转换处理了从DB中提取出来的时间先转换成datetime类型然后依据这个进行比较时间是比较好用的!
1.5 字符串转换成时间元组
date_str = "2008-11-10 17:53:59"
time_tuple = time.strptime(date_str,
"%Y-%m-%d %H:%M:%S")
print
repr(time_tuple)
输出:(2008, 11,
10, 17, 53, 59, 0, 315, -1)
2. 整理datetime模块使用
dt = datetime.now()
print '(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d
%H:%M:%S %f')
print '(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d
%I:%M:%S %p')
print '%%a: %s ' % dt.strftime('%a')
print '%%A: %s ' % dt.strftime('%A')
print '%%b: %s ' % dt.strftime('%b')
print '%%B: %s ' % dt.strftime('%B')
print '日期时间%%c: %s ' % dt.strftime('%c')
print '日期%%x:%s ' %
dt.strftime('%x')
print '时间%%X:%s ' %
dt.strftime('%X')
print '今天是这周的第%s天 ' %
dt.strftime('%w')
print '今天是今年的第%s天 ' %
dt.strftime('%j')
print '今周是今年的第%s周 ' %
dt.strftime('%U')