文章目录
一、时间模块转换图
- 一、时间模块转换图
- 二、时间模块转换举例
- 三、一些时间处理的例子
- 1.从字符串中匹配 【年-月-日】
- 2.随机生成【时:分:秒】
- 3.处理此类形式:【2019-11-20T10:06:09+08:00】
- 4.将2020年3月14日处理为【2020-03-14】
- 5.获取【几天前/几月前/几周前/几年前】的时间
- 6.处理英文月份和固定格式的格式
1.获取时间戳
python时间戳取整为10位,单位为s
import time
print(time.time()) # 1621235477.11
print(int(time.time())) # 1621235477
2.休眠 程序停止运行x秒
time.sleep(3)
3.获取时间元组
#显示当前时间的时间元组
print(time.localtime())
print(time.localtime(time.time())) # 同time.localtime()
#显示一个小时前的时间元组
print(time.localtime(time.time()-3600))
# 显示utc时间的时间元组
print(time.gmtime())
4.时间元组与其他格式的相互转换
时间元组 → 格式化时间
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
# 2021-05-17 15:17:32
格式化时间 → 时间元组
time.strptime('2021-05-17 15:17:32','%Y-%m-%d %H:%M:%S')
时间元组 → 时间戳
print(time.mktime(t)) # 1621235956.0
时间戳格式 → 时间元组
print(time.localtime(time.time())) # 获取时间戳
# time.struct_time(tm_year=2022, tm_mon=1, tm_mday=14, tm_hour=15, tm_min=1, tm_sec=24, tm_wday=4, tm_yday=14, tm_isdst=0)
例:
# --------------将时间戳转为格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 2023-05-09 17:39:5
# ------------将格式化时间转为时间戳
print(time.mktime(time.strptime('2023-05-09 17:39:54', '%Y-%m-%d %H:%M:%S')))
# 1683625194.0
三、一些时间处理的例子
1.从字符串中匹配 【年-月-日】
import re
def format_date(str):
date = re.findall('\d{4}-\d{2}-\d{2}', str)
if date:
return date
else:
return '没有符合的时间格式'
a = '2020-08-06啊撒打算的啊2015-3-1 2005-03-21'
print(format_date(a))
结果:
import random
def get_random_time():
H = str(random.randint(0, 24))
M = str(random.randint(0, 60))
S = str(random.randint(0, 60))
random_time = [H, M, S]
for i in range(0, len(random_time)):
if len(random_time[i]) == 1:
random_time[i] = '0' + random_time[i]
time_ = ':'.join(random_time)
return time_
print(get_random_time())
结果:
处理为:(2020-03-21 15:02:36)
# 1.匹配时间2019-11-20T10:06:09+08:00
def verify_datetime(datetime_):
pattern = r'((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) (20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$'
if re.match(pattern, datetime_):
return True
# 2.处理匹配到的时间
def format_date_tz(raw_date):
date = raw_date.replace('T', ' ').replace('Z', '').split('+')[0]
if not verify_datetime(date):
raise ValueError(raw_date, date)
return date
print(format_date_tz('2019-11-20T10:06:09+08:00'))
结果:
date = '2020年3月14日'
# 例如格式为2016年5月17日,月日可能不足两位的
def format_time(date):
a = date.replace('年', '-').replace('月', '-').strip('日')
b = a.split('-')
for i in range(2):
b[1] = b[1].zfill(2) # 左填充
b[2] = b[2].zfill(2)
b = '-'.join(b)
return b
print(format_time(date))
结果:
def get_date_ago(date):
import datetime
if date.find('月') != -1:
month_ago = int(re.findall('(.*?)月', date)[0])
date = datetime.date.today() - datetime.timedelta(days=int(month_ago * 30))
elif date.find('天') != -1:
day_ago = int(re.findall('(.*?)天', date)[0])
date = datetime.date.today() - datetime.timedelta(days=int(day_ago))
elif date.find('年') != -1:
year_ago = int(re.findall('(.*?)年', date)[0])
date = datetime.date.today() - datetime.timedelta(days=int(year_ago * 365))
elif date.find('周') != -1:
week_ago = int(re.findall('(.*?)周', date)[0])
date = datetime.date.today() - datetime.timedelta(days=int(week_ago * 7))
return date
print(get_date_ago('3天前'))
print(get_date_ago('3周前'))
print(get_date_ago('3月前'))
print(get_date_ago('3年前'))
结果:
def format_Date1(date):
import datetime
time_format = str(datetime.datetime.strptime(date, '%b %d, %Y, %H:%M:%S'))
return time_format
print(format_Date1('Dec 4, 2019, 4:25:41'))
结果: