Pyhton中的时间模块
获取当前日期和时间
使用time模块
import time
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# Out: 2016-12-08 17:14:29
使用datetime模块
from datetime import datetime
from datetime import date
today = date.today()
print(str(today.year) + '-' + str(today.month) + '-' + str(today.day))
# Out: 2016-12-8
print(today.strftime('%Y-%m-%d'))
# Out: 2016-12-08
now = datetime.now()
print(now.strftime('%Y-%m-%d %H:%M:%S'))
# Out: 2016-12-08 17:14:29
参数说明
- strftime(format[, tuple]) -> string
- 将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
- python中时间日期格式化符号:
符号 | 含义 |
---|---|
%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) |
%f | 微秒 (0,999999) |
%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 | 当前时区的名称 |
%% | %号本身 |
时间格式转换
使用time模块
import time
# f代表毫秒
struct_time = time.strptime('161208 17:14:29', '%y%m%d %H:%M:%S')
# struct_time 为一个时间元组对象
print(time.strftime('%Y-%m-%d %H:%M:%S', struct_time))
# Out: '2016-12-08 17:14:29'
使用datetime模块
- datetime.strftime(): str_foramt_time接受日期/时间,输出为字符串,即把时间对象格式化为字符串。
- datetime.strptime(): str_parse_time接受字符串,输出日期/时间,即把字符串转化为日期/时间。
from datetime import datetime
dt = datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')
# dt 为 datetime.datetime对象 # 通过调用 timetuple()方法将datetime.datetime对象转化为时间元组
print(dt.strftime('%Y-%m-%d %H:%M:%S'))
# Out: '2016-12-08 17:14:29'
计算时间间隔
- 使用datetime模块
- datetime.date为日期对象,最小精度为天
- datetime.datetime为日期时间对象,最小精度为妙(毫秒也可以)
计算2016-12-1和1990-1-1中间天数和秒数
import datetime
# 将字符串转换为datetime.date对象
dt_a = datetime.datetime.strptime('2016-12-1', '%Y-%m-%d') # datetime.date 无 strptime 方法
dt_b = datetime.datetime.strptime('1990-1-1', '%Y-%m-%d') # 虽然格式化时间的时候%m为两位数月份
# 但是反格式化时一位月份也可工作
dt = dt_a - dt_b
dt.days # 为 间隔天数
dt.total_seconds() # 为 间隔秒数
dt = datetime.date(2016,12,1) - datetime.date(1990,1,1)
dt.days # 间隔天数
计算两个时间戳间隔时间
from datetime import datetime
timestamp_a, timestamp_b = 1480582517, 1480472517
dt = datetime.fromtimestamp(timestamp_a) - datetime.fromtimestamp(timestamp_b)
print(dt.days, dt.total_seconds())
# Out: 1 110000.0
获取前N天,或者后N天时间
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
计算昨天和明天的日期示例
import datetime
#计算昨天和明天的日期, 按格式化输出
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
tomorrow = today + datetime.timedelta(days=1)
print('today: ', today.strftime('%Y%m%d')) # today: 20161208
print('yesterday: ', yesterday) # yesterday: 2016-12-07
print('tomorrow: ', tomorrow.strftime('%y%m%d')) # tomorrow: 161209
时间戳与日期互转
时间戳计算
- 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
- 通过时间戳获取信息
ts = int(time.time()) # ts = 1480583196
print(ts) / 86400 % 7 + 3 # 获取时间戳对应的星期 0 周日 - 6 周六
# Out: 3 # 周四
# ===============
timestamp_a, timestamp_b = 1480582517, 1480472517
ts = timestamp_a - timestamp_b
print(ts / 86400) # 获取两个时间戳相隔天数
# ===============
# 获取当天00:00:00的时间戳
ts = int(time.time())
print(ts / 86400 * 86400)
# Out: 1480550400
# ===============
# 获取当天23:59:59的时间戳
ts = int(time.time())
print(ts / 86400 * 86400 + 86400 - 1)
# Out: 1480636799
日期转时间戳
# python
from datetime import datetime, date
import time
# 将今天日期转为时间戳
today = date.today()
ts = int(time.mktime(today.timetuple()))
print(ts)
# 将指定日期转为时间戳
date_str = '2016-10-17'
dt = datetime.strptime(date_str, '%Y-%m-%d')
ts = int(time.mktime(dt.timetuple()))
print(ts)
date_str = '2016-10-17 10:00:00'
dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
ts = int(time.mktime(dt.timetuple()))
print(ts)
时间戳转日期
python
from datetime import datetime
datetime.fromtimestamp(float('1480582517.123')).strftime('%Y-%m-%d %H:%M:%S %f')