前几天在做项目的时候遇到了一个关于日期当中汉字转换的问题。平时系统获取的时间都是阿拉伯数字,比如在代码中输入下面的语句:
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)
希望本文可以帮助到大家。