python日期时间处理库总结(time,datetime,dateutil等)
1. 各种时间类
三方库 | 类 | 属性 | 创建 |
---|---|---|---|
<time> | struct_time | tm_year~tm_sec; tm_wday(周0-6); tm_yday(日0-366) | - |
<datetime.time> | time | hour; minute; second | time(14,59,59) |
<datetime.date> | date | year; month; day | date(2020,1,1) |
<datetime.datetime> | datetime | year ~ second | datetime(2020,1,1,14,59,59) |
<pandas> | Timestamp | year ~ second | 接受datetime/date/str; pd.Timestamp(‘2019-1-1’) pd.Timestamp(date(2020,1,1)) |
示例:
2. 时间类的互相转化
A —> B | timestamp | datetime | date |
---|---|---|---|
timestamp | - | =datetime.fromtimestamp(ts) | =date.fromtimestampe(ts) |
datetime | =dt.timestamp() | ||
date | =dt.timestamp() | ||
str | =datetime.fromiosformat(str) | =date.fromiosformat(str) |
完整代码:
from datetime import time, date, datetime
from dateutil.parser import parse
class TimeType_Error(Exception):
pass
def converse_timeType(src, dst):
"""
多种时间日期格式间相互转化
:param src: 原数值
:param dst: 目标的格式 ['str', 'datetime', 'date', 'time', 'timestamp']
:return: 目标数值
"""
_type = type(src)
if dst == 'str':
return str(src)
if _type == str:
dt = parse(src) # 这是datetime格式
if dst == 'datetime':
return dt
if dst == 'date':
return date(dt.year, dt.month, dt.day)
if dst == 'time':
return time(dt.hour, dt.minute, dt.second)
if dst == 'timestamp':
return dt.timestamp()
raise TimeType_Error
if _type == datetime:
if dst == 'datetime':
return src
if dst == 'date':
return date(src.year, src.month, src.day)
if dst == 'time':
return time(src.hour, src.minute, src.second)
if dst == 'timestamp':
return src.timestamp()
raise TimeType_Error
if _type == date:
if dst == 'datetime':
return datetime(src.year, src.month, src.day, 0, 0, 0)
if dst == 'date':
return src
if dst == 'time':
return time(0, 0, 0)
if dst == 'timestamp':
return src.timestamp()
raise TimeType_Error
if _type == time:
if dst == 'datetime':
return datetime(1970, 1, 1, src.hour, src.minute, src.second)
if dst == 'date':
return date(1970, 1, 1)
if dst == 'time':
return src
if dst == 'timestamp':
return 0
raise TimeType_Error
if _type in [float, int]: # timestamp类
src = int(src)
if dst == 'datetime':
return datetime.fromtimestamp(src)
if dst == 'date':
return date.fromtimestamp(src)
if dst == 'time':
dt = datetime.fromtimestamp(src)
return time(dt.hour, dt.minute, dt.second)
if dst == 'timestamp':
return src
raise TimeType_Error
raise TimeType_Error
3. 关于时间日期的常用例子
3.1 获取当前时间
- datetime格式(精确到秒):
datetime.today()
- date格式:
date.today()
- 时间戳:
time.time()
ps: 这个time不是datetime中的库,易混淆
3.2 获取昨天,明天(指定间隔时间/日期)
datetime.timedelta用法:
仅支持datetime和date,不支持time
from datetime import datetime, timedelta
# 昨天的date
date.today() - timedelta(days=1)
# 下一分钟的datetime
datetime.today() + timedelta(minutes=1)