我没有正确地说出这个问题,因此,没有一个答案能够达到标准。
我想知道的是,如果只给出日期而不是日期和时间,那么让time
在一个纪元毫秒内返回一天结束的最佳方式是什么?< / p>
以下是我现在的表现:
def get_epoch_endofday(day):
return time.mktime(time.strptime('005923'+day,"%S%M%H%d%m%y"))*1000
该函数采用ddmmyy形式的日期,然后在当天23:59:00吐出纪元毫秒。
我想知道,有更优雅的方式吗?
答案 0 :(得分:2)
一开始并不是很清楚,但是你想要创建给定日期的间隔(比如2016-02-14
),其中包含当天的第一个和最后一个瞬间。这意味着:
第一个瞬间:2016-02-14 00:00:00.000
最后时刻:2016-02-14 23:59:59.999
以下函数将该间隔作为tupel返回。它的工作原理如下:
start
,其中小时,分钟和毫秒都设置为0
23
小时,59
分钟,59
秒和999999
微秒代码:
from datetime import datetime, timedelta
# 2016-02-08 11:39:31.093209
day = datetime.now()
def get_day_interval(day):
start = datetime(day.year, day.month, day.day)
interval = timedelta(seconds=59, microseconds=999999, minutes=59, hours=23)
return (start, start + interval)
(start, end) = get_day_interval(day)
# 2016-02-08 00:00:00
print(start)
# 2016-02-08 23:59:59.999999
print(end)
有关更多选项,请参阅Python docs。
如果间隔可以是独占的,则代码变得更简单,请参阅this answer的摘要。
答案 1 :(得分:1)
以下是创建包含范围的函数的方法:
def inc_range(stop, start=0, step=1):
numerator = start
while numerator<=stop:
yield numerator
numerator += step
a = [val for val in inc_range(10)]
print(a)
显示器:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
现在这种方法可以适应你想要的任何东西;日期或其他。
这是根据您的需求量身定制的方法:
from datetime import date, timedelta
def date_range(stop, start, step=1):
delta_date = stop - start
numerator = 0
while numerator <= delta_date.days:
yield str(start + timedelta(numerator))
numerator += step
date_start = date(2014, 3, 15)
date_end = date(2014, 3, 21)
a = [val for val in date_range(date_end, date_start)]
print(a)
显示器:
['2014-03-15', '2014-03-16', '2014-03-17', '2014-03-18', '2014-03-19', '2014-03-20', '2014-03-21']
请注意,如果您在生成器中屈服时不包含str()
,则响应将是datetime.date()
的对象。
希望这能回答你的问题。