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)
%H24小时制小时数(0-23)
%I12小时制小时数(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')