關於在Python當中漢字日期的轉換
阿新 • • 發佈:2018-12-12
前幾天在做專案的時候遇到了一個關於日期當中漢字轉換的問題。平時系統獲取的時間都是阿拉伯數字,比如在程式碼中輸入下面的語句:
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)
希望本文可以幫助到大家。