无法获得正确的时间戳范围

时间:2014-10-08 21:06:00

标签: python pandas

我希望在以下两者之间生成一系列时间戳:

  

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:0018:06:40之间的范围(即400秒在18:00)之后

2 个答案:

答案 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

但我可能不明白你的问题是什么

相关问题