关于在Python当中汉字日期的转换

本文介绍了在Python项目中遇到的将阿拉伯数字日期转换为汉字日期的问题。由于标准Word模板要求日期使用汉字,作者发现Python没有内置的转换方法,于是自行编写了一个方法。转换思路包括考虑年、月、日的特殊读法,以及处理不同月和日的位数。代码实现后,分享出来希望能够帮助遇到同样问题的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前几天在做项目的时候遇到了一个关于日期当中汉字转换的问题。平时系统获取的时间都是阿拉伯数字,比如在代码中输入下面的语句:

print (datetime.datetime.now().year)

得到的结果会是2018.。本次项目我遇到的问题是在标准的Word证明模板里添加从数据库查询到的数据,其中证明模板的最后是开证明当天的日期,获取当天的日期本来是一件很简单的事情,但是模板当中要求时间要用汉字进行书写,譬如:二〇一八年九月二十九日。对于编程开发经验较少的我来说,当时就懵了。期初我以为Python当中会有相应的转换方法,可惜查看了一番之后发现并没有写好的转换方法,没办法,只能自己写一个方法来实现这个目标。

     在写方法之前,整理了一下转换的思路。首先,年,月,日三个日期单位转换为汉字之后,他们的读法和写法是不一样的。年通常是按照每一位去读的,比如说今年2019年,读法和写法都是二〇一九年,而不是两千零一十九年,这样的话在方法当中通过循环年的每一位数据进行转换就可以。月和日都是按照对应的数字来读的,比如9月29日,读法和写法应该为九月二十九日,而不应该是九月二九日。在根据一年当中月分为十二个月,每月都有28-31不等的天数,分为以下几种情况:

   这里声明两个变量,分别是

 int month

int  day

月数的三种情况是month <10 ,month ==10,month>10(因为时间是系统自动获取的,所以这里默认month>0 and month<12)

天数的四种情况是 day <10,  day ==10, 10<day<20,day==20, day>20(因为时间是系统自动获取的,所以这里默认day>0 and day<31)

在确定好之后具体的代码如下:

# -*- coding: utf-8 -*-
from __future__ import print_function
import datetime
from mailmerge import MailMerge
date_map = {
    0: '〇',
    1: '一',
    2: '二',
    3: '三',
    4: '四',
    5: '五',
    6: '六',
    7: '七',
    8: '八',
    9: '九'
}


def chinese2digits(num, type):
    str_num = str(num)
    result = ''
    if type == 0:
        for i in str_num:
            result = '{}{}'.format(result, date_map.get(int(i)))
    if type == 1:
        result = '{}十{}'.format(date_map.get(int(str_num[0])), date_map.get(int(str_num[1])))
    if type == 2:
        result = '十{}'.format(date_map.get(int(str_num[1])))
    if type == 3:
        result = '十'
    if type == 4:
        result = '二十'
    return result


year =chinese2digits(datetime.datetime.now().year, 0)
print(year)
date_month = datetime.datetime.now().month
if date_month == 10:
    month = chinese2digits(date_month, 3)
    print(month)
if date_month > 10:
    month = chinese2digits(date_month, 2)
    print(month)
if date_month < 10:
    month = chinese2digits(date_month, 0)
    print(month)
date_day = datetime.datetime.now().day
if date_day < 10:
    day = chinese2digits(date_day, 0)
    print(day)
if 10 < date_day < 20:
    day = chinese2digits(date_day, 2)
    print(day)
if date_day > 20:
    day = chinese2digits(date_day, 1)
    print(day)
if date_day == 10:
    day = chinese2digits(date_day, 3)
    print(day)
if date_day == 20:
    day = chinese2digits(date_day, 4)
    print(day)







希望本文可以帮助到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值