몇 가지 해결책을 찾았지만 대부분은 현재 날짜에 대해 이야기합니다. 내가 원하는 것은 현재 시간이 내일 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)
편집 2timedelta
에서 지적한대로 여전히 작동하지 않습니다 @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)
더 개선 될 수 있습니다. 나는 그것을 할 더 비단뱀적인 방법이 있어야 할 것입니다.
가장 쉬운 해결책은 날짜를 모두 제거하고 시간 값을 자체적으로 비교하는 것입니다. 주어진 시간이 오전 7 시보 다 크고 오후 11 시보 다 작은 경우 tarrif = 3
,, else tarrif = 6
. datetime
객체의 hour
속성을 사용하여이 작업을 수행 할 수 있습니다 .
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
정확성을 위해 저는 타 리프가 점에서 오전 7시에 6에서 3으로 변경되고 점에서 오후 11시에 다시 6으로 변경된다고 가정합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다