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

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

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

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

Q&A

解決済

2回答

4772閲覧

時刻のデータ取扱い方(python3.5)

kazushige

総合スコア20

Python

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

0グッド

1クリップ

投稿2019/01/31 05:38

IDEl(python3.5)で、営業時間内のみリアルタイムで株価を取得するプログラムを作成しているのですが、時刻のデータの扱いがうまくいきません。(下記にプログラムの関係する箇所と実行結果)
具体的に、説明いたしますと、
datetime.now().strftime("%H:%M:%S")で時刻のみのデータを取得し、
datetime.strptime('09:00:00','%H:%M:%S')で、時刻のデータを定義したのですが、

デバッグ文を入れて調べてみたら、datetime.strptime('09:00:00','%H:%M:%S')では、1900-01-01 09:00:00となり、余分な1900-01-01 が付いてきてしまい、時刻の比較が
出来なく、エラーになってしまいます。

 色々調べてみたのですが、良い方法が見つかりません。ご存知の方がいましたら、教えていただけませんでしょうか。よろしくお願いいたします。

取引時間のみグラフ化(9:00-11:30、12:30-15:00)

strptimeは「文字列」を「日付.時間」に変換します。

t1=datetime.strptime('09:00:00','%H:%M:%S')
t2=datetime.strptime('11:30:00','%H:%M:%S')
t3=datetime.strptime('12:30:00','%H:%M:%S')
t4=datetime.strptime('15:00:00','%H:%M:%S'.
.
.
.

現在の時刻を、時、分、秒で取得します

time_ = datetime.now().strftime("%H:%M:%S")

1カラム目に時間を挿入します

time_list.append(time_)
print('time_(時間) = ',time_ )#デバッグ文
print('t1 = ', t1)#デバッグ文
time_d = datetime.strptime(time_,'%H:%M:%S')
print('time_d = ',time_d)#デバッグ文

#取引時間のみグラフ化(9:00-11:30、12:30-15:00)
if( t1 <= time_ <= t2 or t3 <= time_ <= t4) :
.
.

実行結果
time_(時間) = 11:21:00
t1 = 1900-01-01 09:00:00
time_d = 1900-01-01 11:21:00

Traceback (most recent call last):
File "C:/Users/momo/Desktop/時間間隔株価グラフOK.py", line 63, in <module>
if( t1 <= time_ <= t2 or t3 <= time_ <= t4) :
TypeError: unorderable types: datetime.datetime() <= str()

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

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

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

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

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

kazushige

2019/02/03 04:50

すみません。2名のご指摘に対する回答をして終わっていると思っていました。プログラムの具体的な修正まで記載せず失礼いたしました。 ご指摘に沿って、次のように修正して、解決いたしました。 time_ = datetime.now().strftime("%Y/%m/%d %H:%M:%S") →time_ = datetime.now().time()
mather

2019/02/04 01:12

解決した場合はベストアンサーを選んで質問を「解決済み」にしましょう。
guest

回答2

0

ベストアンサー

  • エラーの原因は、time_strftime() にて文字列に変換されていることが原因なので文字列で扱いたい場合以外はstrftime()を取る
  • 日付が入り条件文がおかしくなる件は、datetime.time() にて time のみを得ることができるので、これを用いて比較するとよい

以上、以下のようにすると動作するのではないでしょうか

Python

1from datetime import datetime 2 3t1=datetime.strptime('09:00:00','%H:%M:%S').time() 4t2=datetime.strptime('11:30:00','%H:%M:%S').time() 5t3=datetime.strptime('12:30:00','%H:%M:%S').time() 6t4=datetime.strptime('15:00:00','%H:%M:%S').time() 7 8time_ = datetime.now().time() 9 10if(t1 <= time_ <= t2 or t3 <= time_ <= t4): 11 print('時間内です')

投稿2019/01/31 06:00

magichan

総合スコア15898

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

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

kazushige

2019/01/31 06:16

magichan様 的確なご教示をありがとうございました。 datetime.strptimeは調べて、使ってみたのですが、一部修正ミスが 合ったみたいです。 本当にありがとうございます。今後共によろしくお願いいたします。カズ
guest

0

datetime モジュールにはいくつかの種類のオブジェクト定義があります。

datetime.datetime: 日時
datetime.date: 日付
datetime.time: 時間

今回のケースでは time を比較したいだけなので、 datetimetime に変換して比較しましょう。

>>> datetime.strptime('09:00:00','%H:%M:%S').time() < datetime.now().time() True >>> datetime.strptime('21:00:00','%H:%M:%S').time() < datetime.now().time() False

(現在時刻が9時から21時の間にある場合)

投稿2019/01/31 05:58

mather

総合スコア6753

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

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

mather

2019/01/31 06:00

固定の時間しか使わないなら、いちいち `strptime` で文字列を分解し直さなくても `time` のコンストラクタを使えば良いと思います。
kazushige

2019/01/31 06:20

mather様  timeについて、もう少し勉強します。 ありがとうございました。今後共によろしくお願いいたします。カズ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問