Python 日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
在很多时候Python函数用一个元组装起来的9组数字处理时间
time 模块的 strftime 方法来格式化日期
import time
print(time.strftime('%Y',time.localtime())) #获取完整年份
print(time.strftime('%y',time.localtime())) #获取简写年份
print(time.strftime('%m',time.localtime())) #获取月
print(time.strftime('%d',time.localtime())) #获取日
print(time.strftime('%Y-%m-%d',time.localtime())) #获取年-月-日
2017-10-18
print(time.strftime('%H',time.localtime())) #获取时,24小时制
print(time.strftime('%l',time.localtime())) #获取时,12小时制
print(time.strftime('%M',time.localtime())) #获取分
print(time.strftime('%S',time.localtime())) #获取秒
print(time.strftime('%H:%M:%S',time.localtime())) #获取时:分:秒
16:34:28
print(time.strftime('%a',time.localtime())) #本地简化星期
Wed
print(time.strftime('%A',time.localtime())) #本地完整星期
Wednesday
print(time.strftime('%b',time.localtime())) #本地简化月份
Oct
print(time.strftime('%B',time.localtime())) #本地完整月份
October
print(time.strftime('%c',time.localtime())) #本地日期和时间表示
Wed Oct 18 16:37:46 2017
print(time.strftime('%j',time.localtime())) #一年中的第几天
print(time.strftime('%p',time.localtime())) #P.M等价符
PM
print(time.strftime('%U',time.localtime())) #一年中的第几个星期,星期天为星期的开始
print(time.strftime('%w',time.localtime())) #星期几,星期天为星期的开始
print(time.strftime('%W',time.localtime())) #一年中的第几个星期,星期一为星期的开始
print(time.strftime('%x',time.localtime())) #本地日期表示
10/18/17
print(time.strftime('%X',time.localtime())) #本地时间表示
17:16:17
print(time.strftime('%Z',time.localtime())) #当前时区
CST
print(time.strftime('%%',time.localtime())) #输出%本身
%
print(time.strftime('%Y-%m-%d %H:%M:%S %w-%Z',time.localtime()))
2017-10-18 17:25:39 3-CST #完整日期,时间,星期,时区
Time 模块中经常使用的模块函数
#time.altzone
#返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
#time.asctime([tupletime])
#接受时间元组并返回一个可读的形式为"Thu Oct 19 15:07:31 2017"(2017年10月19日 周四15时07分31秒)的24个字符的字符串。
#time.clock()
#用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
#time.time
#返回当前时间的时间戳(1970年经过的秒数)
#time.strptime()
#根据fmt的格式把一个时间字符串解析为时间元组。
#time.strftime(fmt[,tupletime])
#接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
#time.ctime()作用相当于asctime(localtime(secs)),未给参数相当于asctime()
#time.localtime()以元组方式返回本地当前时间
#time.mktime()将元组时间转换为时间戳
# time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
#time.timezonetime.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。
# time.tznameime.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。
日期比较操作
在datetime模块中有timedelta类,这个类的对象用于表示一个时间间隔,比如两个日期或者时间的差别。
构造方法:
import datetime
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有的参数都有默认值0,这些参数可以是int或float,正的或负的。
可以通过 timedelta.days、tiemdelta.seconds 等获取相应的时间值。
timedelta 类的实例,支持加、减、乘、除等操作,所得的结果也是 timedelta 类的实例。比如:
import datetime
year = datetime.timedelta(days=365)
ten_years = year *10
nine_years = ten_years - year
同时,date、time和datetime类也支持与timedelta的加、减运算。
datetime1 = datetime2 + timedelta
timedelta = datetime1 - datetime2
这样,可以很方便的实现一些功能。
两个日期相差多少天。
import datetime
d1 = datetime.datetime.strptime('2019-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2019-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print delta.days
输出:3
今天的n天后的日期。
import datetime
now = datetime.datetime.now()
delta = datetime.timedelta(days=3)
n_days = now + delta
print n_days.strftime('%Y-%m-%d %H:%M:%S')
输出:
2019-04-10 19:16:34
#计算两个日期的间隔
import datetime
d1 = datetime.datetime.strptime('2019-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2019-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print delta.days print delta