🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

1回答

2652閲覧

Python 時、分だけ取得したい。

WMS

総合スコア37

Python 3.x

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

0グッド

0クリップ

投稿2019/10/22 06:15

お世話になります。

文字列から時間に変換して時間差を求めています。
以下ソースを実行すると「3:00:00」という結果になるのですが、
秒は不要で「3:00」という結果にしたいです。
strptime 関数にて '%H%M' と指定しているので時分でフォーマットされると思うのですが、
なぜ秒まで出力されるかわかりません。

よろしくお願いいたします。

python

1import datetime 2 3p1 = "0900" 4p2 = "1200" 5 6p1 = datetime.datetime.strptime(p1, '%H%M') 7p2 = datetime.datetime.strptime(p2, '%H%M') 8 9p3 = (p2 - p1) 10print(p3) 11

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

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

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

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

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

guest

回答1

0

ベストアンサー

strptimeのフォーマットは関係ありません。
読み取らなかったパラメータ(秒)も勝手に補完されています。

timedeltaオブジェクト(p3)を何らかの方法で文字列化してやる必要があります。

必要な情報を計算する方法

timedeltaオブジェクトは days, seconds, microseconds しか提供していません。
面倒ですが時分は自力で計算します。

Python

1minites, seconds = divmod(p3.seconds, 60) 2hours, minites = divmod(minites, 60) 3assert seconds == 0 4 5print(f'{hours}:{minites:02d}')

参考

不要な情報を削ぎ落す方法

邪道な気がしますが、楽ではあります。

Python

1print(str(p3).rsplit(':', 1)[0])

あるいは

Python

1print(str(p3).rstrip('0123456789')[:-1])

参考

無理にでもstrftimeを使う方法

思い付きです。避けた方が良いでしょう。

Python

1print( 2 (datetime.datetime(2000, 1, 1) + p3).strftime('%H:%M') # ただし、形式は 03:00 3)

どうしても 3:00 と出力したい場合、Linuxであればフォーマット %-I:%M が使えるそうです。
Python datetime formatting without zero-padding - Stack Overflow

投稿2019/10/22 06:25

編集2019/10/22 06:40
LouiS0616

総合スコア35668

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

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

WMS

2019/10/22 06:57

LouiS0616様 いつもありがとうございます。 ただ単純に時分を出力したいだけなのにずっと悩んでおりました。 ようやく先に進めそうです。どの方法でコーディングするか試してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問