我希望在以下两者之间生成一系列时间戳:
2014年10月6日18:00(美国东部时间)
同时 400 秒后,间隔大小为2.2
秒。
当我执行以下操作时:
start_time = datetime.datetime(year = 2014,
month = 10,
day = 6,
hour = 18,
tzinfo = pytz.timezone('US/Eastern'))
end_time = start_time + datetime.timedelta(seconds=400)
似乎有些事情失败了:
start_time.isoformat()
返回'2014-10-06T18:06:40-04:56'
end_time.isoformat()
返回'2014-10-06T18:06:40-04:56'
请注意,上述两个时间戳的时区偏移量为:-04:56
(4小时56分钟),即使EST在UTC后 5小时。 ?
继续前进,如果我尝试在2.2 seconds
每个2200 ms
这两个日期之间获得一系列时间戳:
ts = pd.date_range(start=start_time, end=end_time, freq='2200L')
我明白了:
> ts[0]
Timestamp('2014-10-06 18:56:00-0400', tz='US/Eastern', offset='2200L')
或换句话说:
> ts[0].isoformat()
'2014-10-06T18:56:00-04:00'
这也没有意义(注意时间是18:56
,即使我要求获得18:00
和18:06:40
之间的范围(即400
秒在18:00
)之后
答案 0 :(得分:2)
我厌倦了处理Python笨拙的日期时间实现(特别是关于时区),并且已经开始使用crsmithdev.com/arrow。使用此库的解决方案:
import arrow
start_time = arrow.get(2014, 10, 6, tzinfo='US/Eastern')
end_time = start_time.replace(seconds=400)
print start_time.isoformat()
print end_time.isoformat()
# alternate form
start_time = arrow.get('2014-10-06T18:00:00.000-04:00')
end_time = start_time.replace(seconds=400)
print start_time.isoformat()
print end_time.isoformat()
# get a datetime from an arrow object
start_time_dt = start_time.datetime
答案 1 :(得分:0)
import dateutil.parser as parser
import datetime
start_time = parser.parse("06/Oct/2015 18:00 EST")
end_time = start_time + datetime.timedelta(seconds=400)
interval = datetime.timedelta(seconds=2.2)
current_time = start_time
while current_time < end_time:
current_time += interval
print current_time
但我可能不明白你的问题是什么