python时间处理模块datetime和time
datetime格式与str的常规转换
将datetime格式转成字符串可以用str() 或者 strftime(t, “format”)
将字符串转回datetime必须使用strptime(t, “format”)
不能通过eval()进行转换.
其他情况
创建datetime
datetime.datetime(2019, 1,1, 1, 1, 1)
获取当天的最后时刻24:00:00
datetime.datetime.combine(datetime.date.tody(), datetime.time.max)
处理12小时(AM/PM)的方法
start_time = "2018-09-29-1点12分"
st = re.sub(r'[点分]', "", start_time).replace("下午", "PM").replace("上午", "AM")
# %p代表"AM"/"PM", %I代表小时(1-12)
stt = datetime.datetime.strptime(st, "%Y-%m-%d-%p-%I-%M")
def format_time(self, t):
try:
if "min" in t:
mins = t.strip("mins")
publish_time = self.now - dt.timedelta(minutes=int(mins))
# x小时
elif "hr" in t:
hrs = t.strip(" hrs")
publish_time = self.now - dt.timedelta(hours=int(hrs))
elif "Just now" in t:
publish_time = datetime.now()
else:
# 昨天
if t.startswith("Yesterday"):
yesterday = self.now - dt.timedelta(days=1)
yes_str = yesterday.strftime('%B %d')
t = t.replace("Yesterday", yes_str)
# 补年
if not t.startswith("20"):
year = datetime.now().year
t = "{} {}".format(year, t)
# 小时补足两位
hour = re.findall(r' (\d+:)', t)
if hour:
hour = hour[0]
publish_time = t.replace(hour, hour.rjust(3, "0"))
else:
publish_time = t + " at 00:00 AM"
publish_time = datetime.strptime(publish_time, '%Y %B %d at %I:%M %p')
pt_str = publish_time.strftime("%Y-%m-%d %H:%M:%S")
return pt_str
except:
self.logger.error("时间转换异常,t is [{}]\n{}".format(t, traceback.format_exc()))
时间戳格式化
t_str = time.strftime('%Y-%m-%d %H:%M:%S',t_strap)
时间戳转换成datetime案例
def check_date(ot):
"""
检验日期
:param ot: 解析出来的日期字符串 2019/4/9 13:42:14
:return: 是否满足日期条件, 满足True
"""
ot = str(ot)
r = pattern_dt.findall(ot)
if r:
s = r[0]
t = s[0]
for i in s[1:]:
t += i.rjust(2, "0")
publish = dt.datetime.strptime(t, "%Y%m%d%H%M%S")
else:
t = ot.replace(".", "")[:10]
publish = dt.datetime.fromtimestamp(int(t))
now = dt.datetime.now()
if (now - publish).days > 3:
return False
return True
时间的加减运算变量
前一小时
now - timedelta(days=1)
上个月
now + relativedelta(months=-1)