【发布时间】:2017-02-13 07:27:30
【问题描述】:
我找到了一些解决方案,但其中大多数都在谈论当前日期。我想要的是检查当前时间是否在第二天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
正如@a_guest 所指出的,它仍然不能与timedelta 一起使用。
这是代码
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 的方式来做到这一点
【问题讨论】:
-
对我来说,看起来您拥有所需的所有代码段,但是您以错误的方式组装它。问题是你从当前时间中减去一天,不管你是否必须这样做。你能自己想出一个可能的解决办法吗?这总是比得到别人编造的答案要好......
-
使用
test = cur_time.date() < datetime.today().date()有什么问题? -
我不能使用
today(),因为cur_time来自一个csv文件,我需要与csv文件中提到的时间和日期进行比较。 -
@nostradamus 如果我不从中减去一天,那么如果当前时间是
00:00:00将其与22:00:00进行比较是行不通的,因为它将与未来的同一日期进行比较@ 987654350@ o'clock 不是上一个日期 -
是的,这就是我的意思......所以你需要一个 if 语句,并且根据它你必须在当天减去/添加一些东西。如果您可以添加更多示例(输入 --> 结果),我会更好地理解并且可能会为您提供解决方案。