質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

8498閲覧

Python3 datetime.time 時間の計算

yuyu127

総合スコア27

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/02/10 12:59

python3で、時刻の計算をしたいです。

今、時刻(時間と分)t = "H:M"と、時差sが与えれています。
このとき、tとsと足し算し、時差を計算した時刻(時間と分)を
出力したいとします。

質問は2点です。
1.よりスマートなプログラムにはできないか
2.出力した際、時間:分の形にしたい(余計な秒を除きたい)

作成したプログラム

python

1#与えられた時刻 2t = "11:28" 3 4#与えられた時差 5s = -2 6 7import datetime 8 9#時刻tをdatetime.timeに変換 10time = t.split(":") 11time = datetime.time(int(time[0]),int(time[1])) 12 13#時差の計算 14time2 = datetime.time(time.hour+s,time.minute) 15 16print(time2) 17 18 19#出力 09:28:00

1.よりスマートなプログラムにはできないか
datetime.timeに変化する際、":"で文字列を分ける以外に時間に変更する方法はないか調べています。
また、時差の計算も時間と分にそれぞれ分けているので、無駄に思えます。
時間の形式「H:M」のままスマートに計算する方法はありますでしょうか。

2.出力した際、時間:分の形にしたい(余計な秒を除きたい)
今、出力09:28:00となっておりますが、09:28の形(秒を除く)にする方法はありますでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

2つ解を考えました。

(1) datetime および timedelta を使う

python

1from datetime import datetime, timedelta 2 3# 与えられた時刻 4t = "11:28" 5 6# 与えられた時差 7s = -2 8 9# strptimeで与えられた時刻から datetime オブジェクトを作成 10hhmm = datetime.strptime(t, '%H:%M') 11 12# 与えられた時差からtimedeltaオブジェクトを作成 13delta = timedelta(hours=s) 14 15# hhmm に delta を加える。 16hhmm += delta 17 18# 結果の出力(時分だけを表示) 19print("{0:%H:%M}".format(hhmm))

時差s が小数を含んでも正しく計算されます。たとえば、s = -2.5 とすると、
2時間半前の、08:58 が出力されます。


(2) 正規表現を使う

二番目の解法として、あえて datetime を使わない方法を考えてみました。

python

1import re 2 3# 与えられた時刻 4t = '11:28' 5 6# 与えられた時差 7s = -2 8 9# 正規表現で、与えられた時刻の時と分を取得 10m = re.match(r"^(2[0-3]|[01][0-9]):([0-5][0-9])$", t) 11 12if m: 13 # 与えられた時刻の時に時差を加え、 24の剰余を算出 14 h = (int(m.group(1)) + s) % 24 15 16 # 結果の出力 17 print("%02d:%s" % (h, m.group(2)))

こちらのほうは、与えられる "HH:MM"形式の文字列を "HH" と "MM" とに分割して処理するので、
ご質問で求められている方法ではないかもしれませんし、与えられる時差sの値が整数値で
あることを前提にしています。(つまり与えられた時刻の分は変えないことを仮定しています。)

また、上記のコードの中で、

python

1 h = (int(m.group(1)) + s) % 24

と、 24 の剰余を計算しているのは、与えられた時差sが、 たとえば1000 だったり、
または、-1000 だったりしても、正しい結果を得るための処理です。

以上参考になれば幸いです。

投稿2018/02/10 14:05

編集2018/02/12 03:56
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuyu127

2018/02/10 23:52

jun68ykt様 ありがとうございます。 教えていただいた timedelta でできました。 大変助かりました。
jun68ykt

2018/02/11 01:14

解決されたようですね、良かったです!
guest

0

datetime.timeに変化する際、":"で文字列を分ける以外に時間に変更する方法はないか調べています。

datetime.strptimeについて調べると少し幸せになれそうな気がします。

出力した際、時間:分の形にしたい(余計な秒を除きたい)

datetime.strftimeについて調べると少し幸せになれそうな気がします。

どちらもpython以外でも広く使われているもので、様々な形式の日付・時刻データの読み書きに使えます。

投稿2018/02/10 13:22

編集2018/02/10 13:25
KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuyu127

2018/02/10 23:54

KojiDoi様 コメントありがとうございます。 strptimeについて、使えるようになりたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問