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

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

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

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

Q&A

解決済

2回答

859閲覧

半角スペースの有無を判別したい

okabenzene

総合スコア4

Python

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

0グッド

0クリップ

投稿2021/05/04 14:51

前提・実現したいこと

00:00:00.01からはじまり、24時間を超えると1 00:00:00.01となるような時間表示のデータがあり、hourへ変換しようとしています。
変換するうえでsplitでdayとhh:mm:ssを分割しようと考えています。
現在考えている関数だと24時間以前の処理でエラーが出てしまいます。
そこで半角スペースの有無で処理を分岐しようかと考えているのですが、どう実現したらよいでしょうか。

該当のソースコード

以下のような関数を考えています。

python

1def dt2hour(dt): 2 d, t = dt.split() 3 td = datetime.datetime.strptime(t, '%H:%M:%S.%f')-datetime.datetime(1900, 1, 1) 4 return int(d)*24 + (td.seconds + td.microseconds/1000000)/3600

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

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

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

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

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

meg_

2021/05/04 14:54

> 現在考えている関数だと24時間以前の処理でエラーが出てしまいます。 エラーメッセージを追記してください。
guest

回答2

0

文字通りスペースの有無を知りたいなら。

Python

1if ' ' in dt: 2 スペースがあるときの処理 3 4後略

実際にはスペースの有無に関わらず末尾11文字を取り出せば良い筈なので、こうも書けます。

Python

1dt = dt[-11:]

追記

otnさんの回答を見て思いついたのですが、
意味論的には if ' ' not in dt: dt = f'0 {dt}' が分かり易くて良いかもです。

投稿2021/05/04 15:03

編集2021/05/04 15:09
LouiS0616

総合スコア35660

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

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

LouiS0616

2021/05/04 15:08 編集

※回答に書くべき内容だったので移動し、削除しました。
okabenzene

2021/05/04 17:09

回答ありがとうございます。 ifを使ってプログラムをかけたのですが、 "末尾11文字を取り出せば良い"というのは意味がわかりません。 どういうことなのでしょうか。
LouiS0616

2021/05/05 02:45 編集

00:00:00.01 だろうと 1 00:00:00.01 だろうと、hh:mm:ss:uu の部分の文字数は11文字で固定されているからです。
guest

0

ベストアンサー

場合分けするなら、if " " in dt:でしょうか。

場合分けしないなら、

Python

1def dt2hour(dt): 2 x = ("0 "+dt).split() 3 td = datetime.datetime.strptime(x[-1], '%H:%M:%S.%f')-datetime.datetime(1900, 1, 1) 4 return int(x[-2])*24 + (td.seconds + td.microseconds/1000000)/3600

投稿2021/05/04 15:03

otn

総合スコア84555

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

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

okabenzene

2021/05/04 17:13

回答ありがとうございます。 ifを使ったプログラムでやりたいことはできたのですが、場合分けしないパターンのほうが理解できません。 文字列に"0 "を追加しているのだと思いますが、24時間前と後で場合分けが必要になりませんか?
otn

2021/05/04 17:32

> 24時間前と後で場合分けが必要になりませんか? 何故でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問