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)    收藏  举报

导航