Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28703476
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-03-04 13:43:56

python中时间整理专题

[时间:2010-3-4]

经常会用到时间处理,现在整理出来以备将来的查找使用!

一、time 模块使用整理

提供了各种操作时间的函数。一般有两种表示的方式:

第一种:以时间戳的方式(相对于1970.1.1 00:00:00 以秒计算的偏移量),时间戳是惟一

第二种:以数组的形式表示即(struct_time), 共有九个元素,分别表示,同一个时间戳的stuct_time会因为时区不同而不同。

时区:夏令时区与UTC时区

1.1 函数介绍:

1.1.1 asctime()

asctime([tuple])  -> string

将一个struct_time 转换成字符串

1.1.2 clock()

该函数有两个功能,
在第一次调用的时候,返回的是程序运行的实际时间;(返回整个程序的总运行时间值)
以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔

示例:

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  (从第一次调用到它总共的时间值)

1.1.3 sleep(seconds)

线程推迟指定的时间运行,经过测试,单位为秒

1.1.4 ctime(seconds)

ctime(seconds) -> string
将一个时间戳(默认为当前时间)转换成一个时间字符串.

示例:

if __name__ == '__main__':

print time.ctime()

输出:Thu Mar 04 12:55:03 2010

1.1.5 gmtime(...)
  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]  得到第一个元素值

1.1.6 localtime(...)
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 现在反过来!

1.1.7 mktime(...)
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)
的时间元组。然后我们介绍了一下这两种类型之间的转换处理。如何将时间戳的值转换成一个元组。

通过取到的时间戳的值就可以很容易地获取当前的时间信息了。包括年份、月份之类的!

 

1.1.8 strftime(...)
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) #格式可以自定义出来!格式化时间元组

输出:

2010-03-04

 

1.1.9 strptime()

strptime(string, format) -> struct_time

将时间字符串根据指定的格式化符转换成数组形式的时间

PS:正好与上面的相反过来哦!一个是由时间元组转化成字符串,另外一个就是将字符串转换成时间元组

示例:strs = "2010-03-04"

print time.strptime(strs, "%Y-%m-%d")

输出:(2010, 3, 4, 0, 0, 0, 3, 63, -1)

PS:这样就可以将一个字符串转换成一个时间元组类型输出!

1.1.10.time(...)
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模块

相关联的模块还有timecalendar 其中的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

相关类方法整理

1today()  返回当前的本地时间值

if __name__ == '__main__':

     datetimes = datetime.datetime(2001,12,2)#构造方法参数要指明正确哦

print datetimes.today()

返回:2010-03-04 14:40:51.783000             #即为当前的时间值了

2now([tz])

示例:

if __name__ == '__main__':

    datetimes = datetime.datetime(2001,12,2)

print datetimes.now()

输出:2010-03-04 14:43:09.127000

如果没指定参数即表示当前的时间值!

3strptime(date_string,format)

格式化输出一个时间值!

 

看下这个类的属性(只读属性)

Year    返回指定的时间的年份

if __name__ == '__main__':

    datetimes = datetime.datetime(2001,12,2)

print datetimes.year

返回:2001

相应的还有:monthdayhourminutesecondmicrosecondtzinfo

 

实例方法

Date()      返回一个日期对象其格式为 year,month,day

示例:

if __name__ == '__main__':

    datetimes = datetime.datetime(2001,12,2)

print datetimes.date()

输出:2001-12-02         返回一个日期对象了其格式为 --

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 

# 2008-11-12 13:51:18

将时间元组转换成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 

输出: 2008-11-10 17:53:59

 

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')

 


 

阅读(726) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

hkebao2010-07-05 22:24:11

补充: 1.如何获取当前日期前一天的日期呢? 答:a = datetime.date.today() + datetime.timedelta(days=-1) lastmonth = a.strftime('%Y%m%d') 其中type(a) 为:datetime.date 转换成字符串的方法为:a.strftime('%Y%m%d')