1. 程式人生 > >關於在Python當中漢字日期的轉換

關於在Python當中漢字日期的轉換

    前幾天在做專案的時候遇到了一個關於日期當中漢字轉換的問題。平時系統獲取的時間都是阿拉伯數字,比如在程式碼中輸入下面的語句:

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)







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