python中汉字日期转换为标准格式

汉字日期转换为标准格式

本文应用python,处理格式有以下几种形式:
周一,周二;今天昨天明天;十一月十八日;8月20号。
把上述几种格式同意转换为 2019-11-19 这种格式。

import datetime
import calendar


def normalize_datetime(time):
    """
    处理日期
    :param time:
    :return:
    """
    m_n = None
    today = datetime.date.today()
    currentYear = datetime.datetime.now().year

	"""以下处理十一月六号 或者7月10日 两种格式的日期"""
    if '月' in time and ('日' in time or '号' in time):
        b = time.split('月')
        month, day = b[0], b[-1][:-1]
        if time.isalpha():
            return deal_chinese_date(currentYear, month,day)
        if month.isdigit() and day.isdigit():
            str_time  = "{}-{}-{}".format(currentYear, int(month), int(day))
            return str(datetime.datetime.strptime(str_time, '%Y-%m-%d').date())

	"""处理今天,明天,后天,等格式的日期"""
    if time in ['今天', '现在']:
        return str(today)
    oneday = datetime.timedelta(days=1)

    if time == '昨天':
        return str(today - oneday)
    if time == '明天':
        return str(today + oneday)
    if time == '后天':
        return str(today + datetime.timedelta(days=2))
    if time == '前天':
        return str(today - datetime.timedelta(days=2))
    if time == '大后天':
        return str(today + datetime.timedelta(days=3))
	
	"""处理周一,周三,周日格式的日期"""
    m1 = calendar.MONDAY
    m2 = calendar.TUESDAY
    m3 = calendar.WEDNESDAY
    m4 = calendar.THURSDAY
    m5 = calendar.FRIDAY
    m6 = calendar.SATURDAY
    m7 = calendar.SUNDAY

    week_dict = {'一': m1, '二': m2, '三': m3, '四': m4, '五': m5, '六': m6, '日': m7, '末': m6, '天': m7}
    for num in ['一', '二', '三', '四', '五', '六', '日', '末', '天']:
        if num in time:
            m_n = week_dict.get(num)
    if m_n is not None:
    	"""处理这周三还是下周三的格式的日期"""
        today = deal_weektime(today, oneday, time)
        while today.weekday() != m_n:
            today += oneday
        return str(today)
    return str(today)
if __name__=='__main__':
	a = '周一'
	#a = '今天'
	#a = '昨天'
	#a = '明天'
	#a = '十一月十八日'
	#a = '8月20号'
	res = normalize_datetime(a)
	print(res)
"""用来处理这周或者下周的格式的模块"""
def deal_weektime(today, oneday, time):
    if today.weekday()==0:
        today += oneday
    if '这' in time:
        while today.weekday() != 0:
            today -= oneday
    if '下' in time:
        while today.weekday() != 0:
            today += oneday
    return today
"""用来处理中文日期,例如三月五号格式的模块"""
def deal_chinese_date(currentYear, month, day):
    month_digit = 0
    day_digit = 0
    ch_date_dict = {'一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10}
    if len(month) > 1:
        ten, single = month[:-1], month[-1]
        month_digit = ch_date_dict.get(ten) + ch_date_dict.get(single)
    elif len(month) == 1:
        month_digit = ch_date_dict.get(month)
    if len(day) == 1:
        day_digit = ch_date_dict.get(day)
    elif len(day) > 1:
        if day.startswith('十'):
            ten, single = day[:-1], day[-1]
            day_digit = ch_date_dict.get(ten) + ch_date_dict.get(single)
        elif day.startswith('二'):
            if len(day) == 2:
                day_digit = 20
            else:
                single = day[-1]
                day_digit = 20 + ch_date_dict.get(single)
        elif day.startswith('三'):
            if len(day) == 2:
                day_digit = 30
            else:
                single = day[-1]
                day_digit = 30 + ch_date_dict.get(single)
    str_time =  "{}-{}-{}".format(currentYear, month_digit, day_digit)
    return str(datetime.datetime.strptime(str_time, '%Y-%m-%d').date())
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值