Python:日付と時刻を利用する

Python
スポンサーリンク

Pythonのdatetimeモジュールを使うと現在時刻日付などを扱うことが出来ます。
datetimeモジュールにあるdatetimeオブジェクトを使った日付と時刻の実際例を示します。

本記事は以下のPython公式マニュアルの情報を元に作成しました。

datetime — 基本的な日付型および時間型

スポンサーリンク

現地時間(ローカルタイム)を取得する

まずは以下のような現地時間(ローカルタイム)を取得してみます。

実行イメージ

2020-08-18 15:37:02.519663

53_localtime.py

# ローカルタイム(現地時間)を取得する
from datetime import datetime

today = datetime.now()

print(today)

解説

現地時間は、datetime.now() を使って取り出せます。

表示された値の意味は以下の通りです。

最後のマイクロ秒ですが、0~999999までの値を取ります。こちらに書いてありました。

日時を扱うにはdatetimeモジュールを

from datetime import datetime

として利用します。import datetime のみでの利用も可能ですが、ローカルタイムを取得している処理の

today = datetime.now()

の部分が

today = datetime.datetime.now()

と記述することになり(以下に理由)ソースコードが長くなってしまうのでこうしています。

理由はdatetimeモジュール内の複数存在するクラスの中にdatetimeというクラスが存在するからです。
from 《モジュール名》 import 《クラス名の文法で記述し、《モジュール》の中の《クラス名》のみインポートする、という意味になります。

datetime.now() で利用している nowメソッドは、現在のローカルな日時を返します。「ローカルな」というのは、パソコンやスマホなどで今現在表示されている現地時間の事です。

日時に関する属性とメソッド一覧表(datetimeオブジェクト)

主なものを表にまとめました。

属性/メソッド意味値の範囲
year西暦年1~9999
month1~12
day1~指定された年と月における日数
weekday()曜日を表す数値0~6
月曜日を 0、日曜日を 6 として曜日を整数で表す
hour0~23
minute0~59
second0~59
microsecondマイクロ秒0~999999

これだけではピンときませんので、実際の利用例を次に示します。

表の項目で「属性とメソッド」とありますが、上記表の中では曜日を表すweekday() のみがメソッドであとは属性です。weekday() のみ ()がついていることに注意してください

現在日時を曜日も含めて表示する

datetimeオブジェクトの属性とメソッドを使って日時を表示してみます。

実行イメージ

2020年8月18日(火)
16時15分15秒

54_today.py

# 今日の日付と日時を表示する
from datetime import datetime

# 曜日を漢字で表示するため(0 → 月曜日... 6 → 日曜日)
youbi = ["月", "火", "水", "木", "金", "土", "日"]

today = datetime.now()  # 現地時間を取得

# 年月日
year = today.year
month = today.month
day = today.day

# 曜日を0~6で取得(0が月曜日)
weekday = today.weekday()

# 時分秒
hour = today.hour
minute = today.minute
second = today.second

# 表示
print("{}年{}月{}日({})".format(year, month, day, youbi[weekday]))
print("{}時{}分{}秒".format(hour, minute, second))

解説

とりあえず日時を取得する場合、datetime.now()でも構いませんが、整形した日時を表示したり、日本語であれば曜日に 月、火、水…などの漢字を割り当てて表示したいものです。

これには少し工夫が必要です。理由はdatetimeオブジェクトの属性やメソッドは全て数値で返されるからです。
先ほどの表で言うと水曜日であれば数値の2が返されます。

曜日は月~日0~6で返されるので、リストの添え字に曜日の数値を対応させる形で定義します。

youbi = ["月", "火", "水", "木", "金", "土", "日"]

現地時間はdatetime.now()で取り出せますが、このままでは現地時間全体の情報となってしまいます。そこで属性とメソッドを使って一つ一つ変数に取り出します。

today = datetime.now()  # 現地時間を取得

# 年月日
year = today.year
month = today.month
day = today.day

# 曜日を0~6で取得(0が月曜日)
weekday = today.weekday()

# 時分秒
hour = today.hour
minute = today.minute
second = today.second

年月日と時分秒はそのまま表示できますが、曜日に関しては数値をそのまま表示するわけにいきませんので、先ほど作ったリストの添え字に曜日を表す数値をセットして「月」~「日」の文字を得る形にしています。

youbi[weekday]

参考例(1)時間帯によってメッセージを変える

現在時刻を取得すれば時間帯により処理を変える事ができます。

実行イメージ(実行する時間帯により変化

14:29
こんちわ!

55_jikan_hello.py

# 時間帯によりメッセージを変える
from datetime import datetime

today = datetime.now()

# 現在時刻を表示
hour = today.hour
minute = today.minute
print("{}:{}".format(hour, minute))

# 時間帯によりメッセージを変えて表示
if hour >= 3 and hour <= 9:
    print("起きてる?")
elif hour >= 10 and hour <= 17:
    print("こんちわ!")
elif hour >= 18 and hour <=21:
    print("お晩です")
else:  # 夜10時から真夜中の2時
    print("夜分にゴメンね!")

参考例(2)現在の月を和名で表示する

リストの添え字に取得した現在の月の数値を当てはめて使っています。

実行イメージ(実行月により変化)

8月の和名は、『葉月(はづき)』といいます

56_tukinowamei.py

# 月を和名で表示する
from datetime import datetime

# 月の和名
watuki = ["睦月(むつき)", "如月(きさらぎ)", "弥生(やよい)", "卯月(うづき)", "皐月(さつき)", "水無月(みなづき)", "文月(ふみづき)", "葉月(はづき)", "長月(ながつき)", "神無月(かんなづき)","霜月(しもつき)", "師走(しわす)"]

today = datetime.now()  # 現地時刻を取得

# 月を取得
month = today.month

# 月を和名で表示
print("{}月の和名は、『{}』といいます".format(month, watuki[month-1]))

注)リストは添え字が0から始まるので、wareki[month-1] として使っています。

以上、Python:日付と時刻を利用するでした。Pythonでは西暦は9999年までのようですね!

コメント