2014-01-05 3 views
0

반올림 한 시간 프레임의 시간 스탬프를 확인하는 좋은 방법은 무엇입니까? 예를 들어, "2014-01-04 19:11:35"로 변환되는 1388898695의 데이터베이스에서 타임 스탬프를 가져옵니다.시간 간격을 계산하여 시간 간격을 균등하게 계산하는 Python 메서드

이제 과거의 몇 분이 지난 이전 레코드를 찾고 싶습니다. 2014-01-04 19:10:00부터 시작하십시오. 타임 스탬프 (이 경우 95)에서 초를 알아 내고 13388898695에서 빼서 19:10:00 타임 스탬프로 데이터베이스를 검색 할 수 있습니까?

저는 5 분 또는 15 분 단위와 같은 다른 시간 프레임을 계산하기를 원하기 때문에 일반적인 방법을 찾고 있습니다.


는 확인이 아주 예쁜 아니지만,의는 년/월/일 롤 오버를 무시하고 단지 과거 이분의도 간격을 찾으려고 수 있습니다. 그래서 19:53:12는 19:52:00 (19:50:00까지) 검색을 트리거합니다.

#(2014-01-04 19:53:12) 
time1=1388901192 

year=int(datetime.datetime.fromtimestamp(time1).strftime('%Y')) 
month=int(datetime.datetime.fromtimestamp(time1).strftime('%m')) 
day=int(datetime.datetime.fromtimestamp(time1).strftime('%d')) 
hours=int(datetime.datetime.fromtimestamp(time1).strftime('%H')) 
minutes=int(datetime.datetime.fromtimestamp(time1).strftime('%M')) 
seconds=0 

if minutes%2 == 0: 
    minutes-=2 
else: 
    minutes-=1 

timeString="%s-%s-%s %s:%s:00" % (year,month,day,hours,minutes) 
newTime=time.mktime(time.strptime(timeString, '%Y-%m-%d %H:%M:%S')) 

print newTime, time1 
print datetime.datetime.fromtimestamp(newTime).strftime('%Y-%m-%d %H:%M:%S') 

이 작업을 수행하려면 매우 깨끗한 방법이 아니다 그것은이처럼 보인다 1388901120.0 또는 2014년 1월 4일 19시 52분 0초

의 검색 시간을 생성합니다.


여기 Burhan입니다 칼리드의 방법을 사용하여 내 일반적인 해결책 :

# take timestamp, rewind to timeframe that provides the newest end point where a full interval 
# 10:42:34 -> 10:42:00 for interval=2 to fetch records 10:42:00 to 10:40:00 
# 10:49:34 -> 10:40:00 for interval=10 to fetch records 10:40:00 to 10:30:00 
dt = datetime.datetime.fromtimestamp(ts) 
if (dt.minute % interval) == 0: 
    prev_ts = dt-datetime.timedelta(minutes=0,seconds=dt.second) 
else: 
    temp=round(dt.minute/interval) 
    temp*=interval 
    temp=dt.minute-temp 
    prev_ts = dt-datetime.timedelta(minutes=temp,seconds=dt.second) 
print "%s: %s -> %s" % (interval, dt, prev_ts) 
print time.mktime(prev_ts.timetuple()) 
+1

http://docs.python.org/2/library/datetime.html – SethMMorton

+0

@SethMMorton 필자는 이러한 함수를 사용하고 있음을 분명히 알기를 희망하지만 원하는 시간을 계산하는 방법을 파악하는 데 문제가 있습니다. 인터벌은 검색된 타임 스탬프에 기초한다. – user6972

+0

죄송합니다. 분명하지 않았습니다. 당신은 어떤 코드도 보여주지 않았으므로, 당신이 이미하고있는 일을 전혀 알지 못했습니다. 관련 스 니펫을 표시 할 수 있습니까? – SethMMorton

답변

1

http://docs.python.org/3/library/datetime.html#datetime.timedelta도 분을 얻을 수있는 예입니다, 당신이 시작한다 다른 경우 :

>>> import datetime 
>>> ts = 1388898695 
>>> dt = datetime.datetime.fromtimestamp(ts) 
>>> dt.hour,dt.minute,dt.second 
(8, 11, 35) 
>>> next_ts = dt+datetime.timedelta(minutes=1,seconds=-dt.second) 
>>> next_ts.hour,next_ts.minute,next_ts.second 
(8, 12, 0) 
>>> prev_ts = dt-datetime.timedelta(minutes=1,seconds=dt.second) 
>>> prev_ts.hour,prev_ts.minute,prev_ts.second 
(8, 10, 0) 
0

체크 아웃 여기

#!/usr/local/cpython-3.3/bin/python 

import time 
import datetime 

def main(): 
    time0 = time.time() 
    time.sleep(3) 
    time1 = time.time() 

    print(datetime.timedelta(seconds=(time1 - time0))) 

main() 
+0

그럼 내가 원하는 시간 간격으로 time1을 계산하기 위해 기존 타임 스탬프 (time0)를 취해 년, 월, 일,시, 분, 초를 추출하는 방법은 무엇입니까? – user6972

관련 문제