Python カレンダー表示・時刻計算 学習してみた

ここまで、Pythonの環境構築Pythonのファイル操作・グラフ描画まで学習してきました。
今回の記事では、カレンダー表示・時刻計算を取り上げていきたいと思います。

カレンダー表示

HTMLファイルとしてカレンダーを出力するコードです。

import calendar

# HTMLファイル用のカレンダー作成の準備
lc = calendar.HTMLCalendar()

# 週の始まりは日曜日に設定
lc.setfirstweekday(calendar.SUNDAY)

# 2023年のカレンダーを横4月分の幅で作成し、HTMLのコードを出力
body = lc.formatyear(2023, width=4)

# HTMLのヘッダとフッタを指定
html = """<html><head><style>
table { padding: 8px; }
th { border-bottom: 1px solid gray; }
td { padding: 4px; vertical-align: top; }
.sun { color: red; }
.sat { color: blue; }
</style></head><body>""" + body + """
</body></html>"""

# ファイルに保存
fw = open("calendar2023.html", "wt")
fw.write(html)

fw.close()

ただ単純にカレンダーを標準出力するだけなら、下記の通り。

import calendar

# 週の始まりは日曜日に設定
calendar.setfirstweekday(calendar.SUNDAY)

# 2023年1月カレンダーを表示
print(calendar.month(2023, 1))
# 2023年1月カレンダーを、幅=4、高さ=2の設定で表示
print(calendar.month(2023, 1, w=4, l=2))
# 2023年カレンダーを、横4月分の幅で表示
print(calendar.calendar(2023, m=4))

 


時刻計算

コードを見ると分かると思いますので、ザクザクっとサンプルを載せていきます。
型式が「datetime」「date」「time」「timedelta」と幾つか出てきますが、
扱うものが「日時」「日付」「時間」「時間の差分」と言うことです。

import datetime

# 現在時刻の取得
dt_now = datetime.datetime.now()
print(dt_now)
# 型式の確認
print(type(dt_now))

print(dt_now.year)
print(dt_now.hour)
import datetime

# 指定時刻
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
print(dt.minute)
print(dt.microsecond)

# 省略した場合、0が代入されます
dt = datetime.datetime(2018, 2, 1)
print(dt)
import datetime

# 現在時刻の取得
dt_now = datetime.datetime.now()

# 型式 datetime
print(dt_now)
print(type(dt_now))

# 型式dateへの変換
print(dt_now.date())
print(type(dt_now.date()))
import datetime

# 今日の日付の取得
d_today = datetime.date.today()
print(d_today)
print(type(d_today))

print(d_today.year)
print(d_today.month)
print(d_today.day)
import datetime

# 指定日付、省略不可
d = datetime.date(2018, 2, 1)
print(d)

print(d.year)
print(d.month)
print(d.day)
import datetime

# 指定時刻
t = datetime.time(12, 15, 30, 2000)
print(t)
print(type(t))

print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)

# 省略した場合、0が代入されます
t = datetime.time(12, 15)
print(t)
import datetime

dt1 = datetime.datetime(2023, 2, 11, 6, 25, 15, 4000)
dt2 = datetime.datetime(2023, 2, 12, 12, 15, 30, 2000)

# 時間の差分
td = dt2- dt1
print(td)
print(type(td))

print(td.days)
print(td.seconds)
print(td.microseconds)

# トータルの秒数
print(td.total_seconds())
print((60 * 60 * 24) * td.days + td.seconds + 0.000001 * td.microseconds)
import datetime

# 今日の日付の取得(型式date)
d_today = datetime.date.today()
print(d_today)

# 差分1週間
td_1w = datetime.timedelta(weeks=1)
print(d_today - td_1w)

# 差分10日間
td_10d = datetime.timedelta(days=10)
print(d_today - td_10d)

# 現在時刻の取得(型式datetime)
dt_now = datetime.datetime.now()
print(dt_now)

# 差分50分間
td_50m = datetime.timedelta(minutes=50)
print(dt_now - td_50m)
import datetime

# 文字列の日付
date_str = '2018年2月1日'
date_format = '%Y年%m月%d日'
td_10_d = datetime.timedelta(days=10)
print(date_str)
print(type(date_str))

# 型式datetimeへの変換
date_dt = datetime.datetime.strptime(date_str, date_format)
print(date_dt)
print(type(date_dt))

date_dt_new = date_dt - td_10_d

# 文字列の型へ変換
date_str_new = date_dt_new.strftime(date_format)

print(date_str_new)
print(type(date_str_new))

一旦、長くなってきましたので、ここまで。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

10 + 8 =