Pythonでの漢字日付の変換について
先日、プロジェクトをしていたとき、日付の漢字変換について質問がありました.通常、システムが取得する時間はアラビア数字です.例えば、コードに次の文を入力します.
結果は2018.になります.今回のプロジェクトで私が直面した問題は、標準的なWord証明テンプレートにデータベースから検索したデータを追加することです.証明テンプレートの最後は証明当日の日付で、当日の日付を取得するのはもともと簡単なことですが、テンプレートの中では漢字で書くように時間を要求しています.例えば、二〇一八年九月二十九日です.プログラミング開発の経験が少ない私にとって、その時はぼんやりしていました.期初めはPythonの中で相応の変換方法があると思っていましたが、残念ながら調べてみると、書いてある変換方法がないので、仕方なく、自分で1つの方法を書いてこの目標を実現するしかありません.
書き方の前に、変換の考え方を整理しておきました.まず、年、月、日の3つの日付の単位が漢字に変換された後、彼らの読み方と書き方は違います.年は一般的に一人一人が読むもので、例えば今年2019年は読み方も書き方も二〇一九年で、二千一十九年ではなく二〇一九年である.月も日も対応する数字で読みます.例えば、9月29日、読み方と書き方は9月29日で、9月29日ではなく9月29日です.一年の中で月を12ヶ月に分け、毎月28-31の日数があり、以下の状況に分けられます.
ここでは2つの変数を宣言します.それぞれは
int month
int day
月数の3つのケースはmonth<10,month=10,month>10(時間はシステムが自動的に取得するので、ここではデフォルトmonth>0 and month<12)
日数の4つのケースはday<10,day==10,1020(時間はシステムが自動的に取得するので、ここではデフォルトday>0 and day<31)
確定した後の具体的なコードは以下の通りです.
本文がみんなを助けることができることを望みます.
print (datetime.datetime.now().year)
結果は2018.になります.今回のプロジェクトで私が直面した問題は、標準的なWord証明テンプレートにデータベースから検索したデータを追加することです.証明テンプレートの最後は証明当日の日付で、当日の日付を取得するのはもともと簡単なことですが、テンプレートの中では漢字で書くように時間を要求しています.例えば、二〇一八年九月二十九日です.プログラミング開発の経験が少ない私にとって、その時はぼんやりしていました.期初めはPythonの中で相応の変換方法があると思っていましたが、残念ながら調べてみると、書いてある変換方法がないので、仕方なく、自分で1つの方法を書いてこの目標を実現するしかありません.
書き方の前に、変換の考え方を整理しておきました.まず、年、月、日の3つの日付の単位が漢字に変換された後、彼らの読み方と書き方は違います.年は一般的に一人一人が読むもので、例えば今年2019年は読み方も書き方も二〇一九年で、二千一十九年ではなく二〇一九年である.月も日も対応する数字で読みます.例えば、9月29日、読み方と書き方は9月29日で、9月29日ではなく9月29日です.一年の中で月を12ヶ月に分け、毎月28-31の日数があり、以下の状況に分けられます.
ここでは2つの変数を宣言します.それぞれは
int month
int day
月数の3つのケースはmonth<10,month=10,month>10(時間はシステムが自動的に取得するので、ここではデフォルトmonth>0 and month<12)
日数の4つのケースはday<10,day==10,1020(時間はシステムが自動的に取得するので、ここではデフォルト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)
本文がみんなを助けることができることを望みます.