1. 时间戳及 time 模块
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
函数time.time()用于获取当前时间戳;
使用 time 模块的 strftime 方法来格式化日期:
time.strftime(format[, t])
示例:
import time
timestamp = time.time() #1594475666.4027507
#转换成localtime
time_local = time.localtime(timestamp)
#转换成新的时间格式(2020-07-11 21:54:26)
time.strftime("%Y-%m-%d %H:%M:%S",time_local)
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
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)
%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 当前时区的名称
%% %号本身
2. datetime 模块
datetime是Python处理日期和时间的标准库。
注意到datetime
是模块,datetime
模块还包含一个datetime
类,通过from datetime import datetime
导入的才是datetime
这个类。
我们来看from datetime import datetime
的这个datetime
类吧:
class datetime(date):
"""datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
The year, month and day arguments are required. tzinfo may be None, or an
instance of a tzinfo subclass. The remaining arguments may be ints.
"""
__slots__ = date.__slots__ + time.__slots__
def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0,
microsecond=0, tzinfo=None, *, fold=0):
# 这里省略了一部分代码,想看完整的,可以看参考链接github源码
year, month, day = _check_date_fields(year, month, day)
hour, minute, second, microsecond, fold = _check_time_fields(
hour, minute, second, microsecond, fold)
_check_tzinfo_arg(tzinfo)
self = object.__new__(cls)
self._year = year
self._month = month
self._day = day
self._hour = hour
self._minute = minute
self._second = second
self._microsecond = microsecond
self._tzinfo = tzinfo
self._hashcode = -1
self._fold = fold
return self
示例:
from datetime import datetime
dt = datetime(2020,10,1,11,11)
print(dt)
结果:
2020-10-01 11:11:00
把一个datetime
类型转换为timestamp
:
print(dt.timestamp())
结果:
1601521860.0
其中,Python的timestamp
是一个浮点数,整数位表示秒。
timestamp转换为datetime
要把timestamp
转换为datetime
,使用datetime
提供的fromtimestamp()
方法:
print(datetime.fromtimestamp(dt.timestamp()))
结果:
2020-10-01 11:11:00
datetime转换为str
from datetime import datetime
now = datetime.now()
print(now.strftime('%y-%m-%d %H:%M:%S %A-%B'))
具体字符的含义可以看第一部分列出的日期格式化符号。
结果:
20-10-14 09:10:01 Wednesday-October
3. 应用
两个时间差相减
from datetime import datetime
import time
now_time = datetime.now()
timestamp = 1479264792
timeStruct = time.localtime(timestamp)
b_time = time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
# b_time: 2020-12-08 23:33:35
# time -> datetime
b_time = datetime.strptime(b_time, '%Y-%m-%d %H:%M:%S')
delta = now_time - b_time
print("delta", delta.days, delta)
#print("total seconds", delta.seconds + delta.days*86400)
结果:
delta 10 days, 15:51:32.470647