python遇上大写年月日时,你的写法是什么样的

本文介绍了如何使用Python编写函数,实现将阿拉伯数字转换为中文大写格式,进而生成20200101至20231231日期的中文大写形式,以满足文章落款和爬虫中的日期展示需求。重点讲解了函数设计、条件判断和日期处理技巧。
摘要由CSDN通过智能技术生成

在这里插入图片描述

问题

    生成20200101至20231231日的大写日期,例如:二〇二三年十二月三十一日,常用的使用场景为文章的落款,同时爬虫人也知道了,原始内容反写为短日期

目的

   锻炼python基础知识的使用,函数,def,if,列表,join,数字除法运算等

实现思路

编写数字转换函数

 首先,需要编写一个函数 to_chinese_number,用于将阿拉伯数字转换为中文大写数字。这个函数的输入是一个整数,输出是相应的中文大写数字字符串。

生成日期函数:

然后,需要编写一个生成日期的函数 generate_dates。在这个函数中,我们使用嵌套的循环来遍历从 2023 年到 2019 年的年份、月份和日期。对于每个日期,我们将调用 to_chinese_number 函数将年份、月份和日期转换为中文大写形式,并将它们拼接成一个字符串。

考虑月份和日期的不同情况

    在生成日期的过程中,我们需要考虑不同月份的天数情况,以及闰年的情况。因此,在循环中需要进行适当的条件判断,确定每个月的最大天数。

实现代码

# -*- coding: encoding -*-

def to_chinese_number(n):
    """
    将阿拉伯数字转换为中文大写数字
    """
    chinese_nums = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
    if n == 0:
        return chinese_nums[0]
    elif n <= 10:
        return chinese_nums[n]
    elif n < 20:
        return '十' + chinese_nums[n - 10]
    elif n < 100:
        tens = n // 10
        ones = n % 10
        if ones == 0:
            return chinese_nums[tens] + '十'
        else:
            return chinese_nums[tens] + '十' + chinese_nums[ones]

def generate_dates():
    """
    生成20230101至20201231日期的大写形式
    """
    for year in range(2023, 2019, -1):
        chinese_year = ''.join([to_chinese_number(int(d)) for d in str(year)])
        for month in range(12, 0, -1):
            max_day = 31
            if month in [4, 6, 9, 11]:
                max_day = 30
            elif month == 2:
                if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
                    max_day = 29
                else:
                    max_day = 28
            chinese_month = to_chinese_number(month)
            for day in range(max_day, 0, -1):
                chinese_day = to_chinese_number(day)
                date_str = f"{chinese_year}{chinese_month}{chinese_day}日"
                yield date_str

# 测试
for date in generate_dates():
    print(date)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值