#时间#:datetime、time

概述

Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。
time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。

datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体关系如下:
object
timedelta # 主要用于计算时间跨度
tzinfo # 时区相关
time # 只关注时间
date # 只关注日期
datetime # 同时有时间和日期
在实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。

time

时间

timestamp = time.time()     # 返回当前时间戳,秒,1414332433.345712
tm = time.localtime()                   # time.struct_time(tm_year=2017, tm_mon=8, tm_mday=19, tm_hour=23, tm_min=38, tm_sec=53, tm_wday=5, tm_yday=231, tm_isdst=0)
tm.tm_year  tm.tm_mon  ...
time.ctime()    time.ctime(time.time()+15)      返回可视化时间(字符串)

睡眠
调用sleep()会从当前线程交出控制,要求它等待系统将其再次唤醒。如果程序只有一个线程,这实际上就会阻塞应用,什么也不做。

time.clock()返回处理器时钟时间,性能测试/基准测试等,反映程序使用时间(float)
time.sleep(i)睡i秒,睡眠不会影响clock()值。

datetime

datetime.datetime

----------
类方法:
datetime.datetime(2017, 1, 1)
now = datetime.datetime.now(tz)         # tz参数可有可无,返回现在的日期时间datetime.datetime(2017, 8, 19, 22, 39, 53, 861017)
now = datetime.datetime.today()         # 无参数datetime.datetime(2017, 8, 19, 23, 52, 37, 242857)
datetime.utcnow()  # UTC 时间
datetime.fromtimestamp(timestamp[, tz]) # 由 Unix Timestamp 构建对象
datetime.strptime(date_string, format)  # 给定时间格式解析字符串

----------
实例方法:

now.year  now.month  now.day  now.hour  now.minute  now.second  now.microsecond
now.max  now.min  now.resolution        # 改类型的最大值、最小值、精确度

now.weekday()                           # 返回今天周几(0~6,0为周一,6为周日)
now.isocalendar()                       # (2017, 33, 6)周一为起始点,能顺利解决跨年问题,年处的归为上一年未满的周
now.isoweekday()                        # 1-7周一到周日
now.isoformat()                         # '2017-08-19'

now.date()                              # 返回 date 对象datetime.date(2017, 8, 19)
now.time()                              # 返回 time 对象datetime.time(22, 40, 56, 372702)
now.replace(name=value)                 # 前面所述各项属性是 read-only 的,需要此方法才可更改
now.timetuple()                         # 返回time.struct_time 对象
now.strftime(format)                    # 按照 format 进行格式化输出

datetime.timedelta

# 实例化
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])   

span = now2 - now1                      # datetime.timedelta(0, 265, 507353)  
span.days  span.seconds  span.microseconds
now.max  now.min  now.resolution
span.total_seconds()                    # 该时间差的总秒数,以秒为单位的float类型

‘用时: {:02d}:{:02d}’.format(timespan.seconda / 60, timespan.seconds % 60) 

datetime.date

像是datetime.datetime的缩小版,方法跟now的一样

today = datetime.date.today()           # datetime.date(2017, 8, 19)
today.year  today.month  now.day
today.weekday()         
today.isocalendar()                     # (2017, 33, 6)周一为起始点,能顺利解决跨年问题,年处的归为上一年未满的周
today.isoweekday()                      # 1-7周一到周日
today.isoformat()                       # '2017-08-19'

按格式输出字符串

由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()
两个函数都涉及日期间的格式化字符串http://blog.csdn.net/shomy_liu/article/details/44141483
官方文档https://docs.python.org/2.7/library/datetime.html
列举如下:
‘%Y-%m-%d %H:%M:%S’
%w 当天在当周的天数,范围为[0, 6],6表示星期天
%y两位表示年
%I 12进制表示小时 %P 返回是上午还是下午–AM or PM
%W 返回当周是当年的第几周 以周一为第一天
%j 返回 当天是当年的第几天 范围[001,366]

from dateutil.parse import parser
parser(‘2001-02-02’)将格式化的字符串自动识别转化为日期

dateutil

PACKAGE CONTENTS
_common
easter
parser
relativedelta
rrule
tz (package)
tzwin
zoneinfo (package)

calendar

from calendar import monthrange
now + timedelta(days=monthrange(start.year,start.month)[1])

business_calendar

如果有需要计算工作日的需求,可以使用 business_calendar这个库

参考

http://www.jb51.net/article/75364.htm
http://www.cnblogs.com/lhj588/archive/2012/04/23/2466653.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值