2017-02-13 18 views
0

私はいくつかの解決策を見つけましたが、そのほとんどは現在の日付について語ります。私が欲しいのは、現在の時刻が翌日23:00:0007:00:00の範囲内にあるかどうかをチェックすることです。私は日付がこれにも関わっているので、困難に直面しています。したがって、現在の時刻が00:00:00の場合、日付も変更され、同じ日の時刻と比較すると、23:00:00は私に間違った結果をもたらします。これは今私が思いついたものです。これは3であることを関税をもたらすであろう時間が日付の範囲内にあるかどうかを確認する方法

cur_time = dt.strptime('2/9/16 00:00', "%m/%d/%y %H:%M") 
prev_date = dt.strftime(cur_time.date() - timedelta(days=1), "%m/%d/%y") 
same_date = dt.strftime(cur_time.date(), '%m/%d/%y') 
dosta = dt.strptime(prev_date + "22:00", "%m/%d/%y%H:%M") 
satta = dt.strptime(same_date + "07:00", "%m/%d/%y%H:%M") 
if dosta < cur_time < satta: 
    tariff = 3 
else: 
    tariff = 6 
print(tariff) 

を解決策を見つけることに私を助けてください私が変更された場合、この

cur_time = dt.strptime('2/9/16 23:00', "%m/%d/%y %H:%M")

ようcur_timeこれは、これは私を与えるだろう。3.得られませんこれは現在の時刻を前日の00:00と比較しているため、現在の日である07:00と現在の日である23:00は明らかに大きくなります。

編集1

Input: 2/9/16 06:00:00

Output: 3...because 06:00:00 is less than 07:00:00 that same day(2/9/2016) and more than 22:00:00 previous day(2/8/16)

Input: 2/9/16 23:00:00Output: 3...because 23:00:00 is more than 22:00:00 that same day(2/9/2016)

Input: 2/10/16 00:30:00Output: 3...because 00:30:00 is more than 22:00:00 that previous day(2/9/2016) and less than 07:00:00 same day(2/10/2016)

Input: 2/10/16 08:00:00 Output: 6...because 08:00:00 is more than 07:00:00 that same day(2/9/2016) and less than 22:00:00 on the same day(2/9/2016)

編集2 @a_guestで指摘したようにそれはまだtimedeltaで作業されていません。 ここcur_time00:00:00 9/2/16

編集3

from datetime import datetime, time 
import csv 
import os 


CSV_FILE_ASCO = os.path.join('..', 'res', 'ASCO_METER.csv') 
with open(CSV_FILE_ASCO, 'r') as f: 
    reader = csv.DictReader(f) 
    data = list(reader) 

for each in data: 
    # print() 
    cur_date = datetime.strptime(each['Start'], "%m/%d/%y %H:%M") 
    if time(7, 0) <= cur_date.time() < time(22, 0): 
     tarrif = 6 
    else: 
     tarrif = 3 
    print(cur_date, end=" ") 
    print(tarrif) 

はそれをさらに向上させることができる可能性の高い答えは偽の場合、これは私に与えているコード

for each in zip(data1, data2): 
    # client.write_points(json_body_bill_data) 
    cur_time = dt.strptime(each[1]['Start'], "%m/%d/%y %H:%M") 
    # print(cur_time.date()) 
    dosta = dt.strptime('2200', '%H%M').time() 
    # print(dosta) 
    lower = datetime.datetime.combine(cur_time.date(), dosta) 
    upper = lower + timedelta(hours=8.5) 
    print("lower", lower) 
    print("upper", upper) 
    print(cur_time, lower < cur_time < upper) 

です。

+0

私には、必要なすべてのコードセグメントがあるようですが、間違った方法でアセンブルしているようです。問題は、現在の時刻から1日を差し引くことです。必要があるかどうかは関係ありません。可能な修正を自分で思いつくことができますか?それは他の誰かが作った答えを得るよりもずっといいです... – nostradamus

+0

'test = cur_time.date()

+0

'cur_time'がcsvファイルから来ているので、私は' today() 'を使うことができません。そして、私はcsvファイルに記述されている日時と比較する必要があります。 –

答えて

1

は完全に日付を取り除くだけ自分で時間値を比較得ることであろう。所定の時間が午前7時より午後11時未満の場合は、tarrif = 3、それ以外の場合はtarrif = 6です。私は、ドットの午前7時で6〜3 tarrifの変更を想定し、バック6に11PMのドットによ、正確を期すために

from datetime import datetime 

cur_date = datetime.strptime('2/9/16 07:00', "%m/%d/%y %H:%M") 
if 7 <= cur_date.hour < 23: 
    tarrif = 3 
else: 
    tarrif = 6 

:あなたはこのdatetimeオブジェクトのhourプロパティを使用して行うことができます。

+0

あなたのソリューションの外観に感謝きれいにして少し変更するだけでうまくいきます... Edit 3にコードを投稿 –

+1

'datetime'オブジェクトの' hour'プロパティを使って簡単にすることができます: '7 <= cur_date.hour <23' –

0

比較中の日付を無視し、時間が23:00または< 07:00であるかどうかをチェックします。 fiddle作業チェック:それは最も簡単な解決策のように聞こえる

import datetime 
dosta = datetime.datetime.strptime("23:00", '%H:%M') 
satta = datetime.datetime.strptime("07:00", '%H:%M') 

print dosta.time(), satta.time() 

for h in range(0,24): 

    h = str(h).zfill(1) 
    cur_time = datetime.datetime.strptime('2/9/16 {h}:00'.format(h=h), "%m/%d/%y %H:%M") 

    if cur_time.time() > dosta.time() or cur_time.time() < satta.time(): 
     print "IN RANGE " + h 
    else: 
     print "OUT OF RANGE " + h 
+0

これは 'または'ではありません。それは 'と'でしょう。さらに、私は日付を拒否することはできません。私は日時を両方取らなければならない。 '2/9/16 23:30'は' 2/9/16 22:00'で '2/10/16 00:00'で比較しなければならないので、' 2/9/16 23:30'では '2/10/16 22:00' –

+0

'00:00 'から'07:00'までのすべての '次の日' '00:00 'と'07:00'の間で同じ日をチェックするのと同じです – Vanojx1

関連する問題