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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

301閲覧

datetime.strptimeに関する記述方法

tetsu1231

総合スコア9

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/21 00:42

質問

該当のソースコードの中の
start = datetime.strptime(f"{cols[0]} {cols[1]}", "%Y/%m/%d %H:%M")
において、{cols[0]} {cols[1]の間に半角スペースがないと、エラーになります。この半角スペースが必要な理由がわかっていないため、わかる方がいれば教えていただきたいです。

  • {cols[0]} {cols[1]の間に半角スペースがないと、エラーになる理由

前提

こちらのソースコードは、レンタルサイクルの利用時間(開始時間、終了時間)から、貸出時間を算出するコードです。

該当のソースコード

from datetime import datetime
with open ("input/bicycle.csv",encoding = "utf-8") as f:
print(f"{f.readline().rstrip()},レンタル時間")

for row in f: row = row.rstrip() cols = row.split(",") start = datetime.strptime(f"{cols[0]} {cols[1]}", "%Y/%m/%d %H:%M") end = datetime.strptime(f"{cols[0]} {cols[2]}","%Y/%m/%d %H:%M") rental_hours = (end - start).total_seconds() / 3600 print(f"{row},{rental_hours}")
Python

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

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

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

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

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

guest

回答2

0

ベストアンサー

datetime.strptime は文字列を日付として解釈するメソッドです。
cols[0] cols[1] はおそらく ”2023/02/21" "12:34" のような値が入っていると思われます。

ご質問の件ですが、

datetime.strptime(f"{cols[0]} {cols[1]}", "%Y/%m/%d %H:%M")

f"{cols[0]} {cols[1]}" の部分は文字列に変数の中身を埋め込むという指示です。cols[]が上記の状態の時に
print(f"{cols[0]} {cols[1]}") を実行すると "2023/02/21 12:34" となります。

なので、変数を展開すると、質問者さんのコードが実行するのは以下のような命令になります。

datetime.strptime("2023/02/21 12:34", "%Y/%m/%d %H:%M")

strptimeの二番目の引数は、日付の形式を指定するものですが、日付と時刻の間にスペースが入っているので
一番目の引数にも日付と時刻の間にスペースが必要となります。

逆にスペースを付けたくなければ以下のようにすれば動くと思います。
(メリットはありませんし、読みづらいのでおすすめしません)

datetime.strptime(f"{cols[0]}{cols[1]}", "%Y/%m/%d%H:%M")

投稿2023/02/21 01:23

YakumoSaki

総合スコア2027

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

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

tetsu1231

2023/02/21 07:59

ご回答いただき、誠にありがとうございます "%Y/%m/%d %H:%M"の日付と時刻の間にスペースが入っているので、一番目の引数にも日付と時刻の間にスペースが必要という点、非常にわかりやすかったです!ありがとうございます。
guest

0

第2引数の日付書式 "%Y/%m/%d %H:%M" にて、年月日と時分の間に空白があるので、入力の文字列も空白で区切る必要があります。
cols[0] には 2023/02/21cols[1] には 10:14 のような文字列が入っているのでしょう。空白なしだと 2023/02/2110:14 のようになってしまい、書式に合わなくなります。

投稿2023/02/21 01:15

int32_t

総合スコア20941

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

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

tetsu1231

2023/02/21 08:01

ご回答いただき、誠にありがとうございます。 第2引数の日付書式 "%Y/%m/%d %H:%M"と、第1引数も書式を合わせないといけないんですね! とても分かりやすかったです。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問