我找到了一些解決方案,但大多數都在討論當前日期。我想要的是檢查當前時間是否在23:00:00
和07:00:00
第二天。我面臨困難,因爲日期也涉及到這一點。因此,如果當前時間爲00:00:00
那麼日期也會發生變化,並且與同一天的時間23:00:00
比較會給我一個錯誤的結果。這就是我現在想到的。請幫我在尋找解決辦法如何檢查時間是否在日期範圍內
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)
這將導致關稅爲3,但如果我改變cur_time
這樣
cur_time = dt.strptime('2/9/16 23:00', "%m/%d/%y %H:%M")
這不會產生3.這會給我6.因爲這是比較當前時間與前一天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:00
Output: 3...because 23:00:00 is more than 22:00:00 that same day(2/9/2016)
Input: 2/10/16 00:30:00
Output: 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 它仍然無法與timedelta
工作由@a_guest
指出。 下面是代碼
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)
這是給我的,如果假cur_time
是00: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)
能不能進一步提高。我敢打賭,必須採取更爲pythonic的方式去做
對我來說,它看起來像你有你需要的所有代碼段,但你組裝它錯誤的方式。問題是,你從當前時間減去一天,無論你是否需要。你能想出一個可能的解決方案嗎?這總是比得到其他人編寫的答案要好... – nostradamus
使用'test = cur_time.date()
我不能使用'today()',因爲'cur_time'來自csv文件,我需要與csv文件中提到的時間和日期進行比較。 –