python基础---时间转换
- 时间的处理,时间的函数封装及类:
from datetime import datetime from dateutil import parser d1 = '2018/08/26 19:26' date1 = datetime.strptime(d1, "%Y/%m/%d %H:%M") # 变量名不能用date,因为datetime里有date类 print(type(date1), date1) # <class 'datetime.datetime'> 2018-08-26 19:26:00 date_str = date1.strftime("%Y-%m-%d %X") print(type(date_str), date_str) # <class 'str'> 2018-08-26 19:26:00 # 另一个判断类型的方法 isinstance #使用parser快速搞定,不用傻傻拼格式 # 字符串转化成时间格式 d1 = '2018/08/26 19:26' date1 = parser.parse(d1) print(type(date1), date1) # <class 'datetime.datetime'> 2018-08-26 19:26:00 #中文的年月日的处理 d1 = "2018年8月26日 19:40" date1 = d1.replace("年" ,'/').replace("月", '/').replace("日", '') print(type(date1), date1) # <class 'str'> 2018/8/26 19:40 #只有日期,自动追加时间 s = '1.6' s_month = s.split('.')[0] # 提取月 1 s_day = s.split('.')[1] # 提取日 6 print(type(s_day), s_day) # <class 'str'> 6 now = datetime.now().replace(day=int(s_day), month=int(s_month)) print(now) # 2018-01-06 19:56:04.142957 now.strftime("%Y-%m-%d %X") # '2018-01-06 19:57:01' #封装函数 def change_datetime(dt): """转化日期时间格式为yyyy-mm-dd hh:mm:ss""" date1 = parser.parse(dt) date_str = date1.strftime("%Y-%m-%d %X") # print(type(date_str), date_str) return date1, date_str # 返回一个元组 change_datetime('2018/08/26 20:14') # (datetime.datetime(2018, 8, 26, 20, 14), '2018-08-26 20:14:00') def change_datetime_cn(dt): """转化中文年月日的时间""" date1 = dt.replace('年', '/').replace('月', '/').replace('日', '') return change_datetime(date1) change_datetime_cn('2018年8月26日') # (datetime.datetime(2018, 8, 26, 0, 0), '2018-08-26 00:00:00') def change_datetime_num(dt): """转换'1.6'这种格式的月日的日期,并添加时间""" month, day = dt.split('.') now = datetime.now() my_time = now.replace(month=int(month), day=int(day)) print(now, my_time) return now, my_time.strftime('%Y-%m-%d %X') change_datetime_num('1.6') # (datetime.datetime(2018, 8, 26, 21, 43, 1, 889606), '2018-01-06 21:43:01') # 抽象成类 class TimeMaster: def __init__(self, fmt='%Y-%m-%d %X'): self._output_format = fmt def change_datetime_num(self, dt): """转换'1.6'这种格式的月日的日期,并添加时间""" month, day = dt.split('.') now = datetime.now() my_time = now.replace(month=int(month), day=int(day)) print(now, my_time) return now, my_time.strftime(self._output_format) def set_format(self, new_fmt): """更改日期格式的函数""" self._output_format = new_fmt tm = TimeMaster() tm.set_format('%Y-%m-%d %A-%B') tm.change_datetime_num('8.27') # (datetime.datetime(2018, 8, 26, 22, 7, 35, 79054), '2018-08-27 Monday-August')
- 相对时间的应用实例:
from datetime import datetime data = {'time':'', 'thing':''} def add(item): now = datetime.now().strftime('%Y-%m-%d %H:%M') data['time'] = now data['thing'] = item return data add('去超市购物') # {'thing': '去超市购物', 'time': '2018-08-26 23:00'} from dateutil.relativedelta import relativedelta s = '明天去超市购物' if s.find('明天') > -1: # 取到值返回0,否则返回-1 now = datetime.now() tomorrow = (now + relativedelta(days=1)).strftime("%Y-%m-%d %H:%M") print(tomorrow) # 2018-08-27 23:00 from dateutil.relativedelta import relativedelta ss = '下个月5号去大栅栏买2斤花生米' if ss.find('下个月') > -1: now = datetime.now() print(now) # 2018-08-26 22:56:11.862209 print((now + relativedelta(months=1, day=5)).strftime('%Y-%m-%d %H:%M')) # 2018-09-05 22:56 下个月的5号 print((now + relativedelta(months=1, days=5)).strftime('%Y-%m-%d %H:%M')) # 2018-10-01 22:56 下个月再加5天
posted on 2018-08-26 22:21 guoqian205 阅读(604) 评论(0) 收藏 举报