2012-04-02 3 views
2

날짜/시간 델타 객체를 조작하는 방법이 궁금합니다. 나는 다른 행성이 다른 시간 계를 가지고있는 게임을 쓰고있다. 그리고 datetime 객체를 수정하는 것이 어떻게 가능할 지 궁금합니다.Python에서 DateTime 및 TimeDelta 객체 조작

예를 들어 날짜 시간 객체가있는 경우 - 과거의 datetime 객체가 몇 시간 동안 다른 시간에 얼마나 많은 시간을 할 수 있는지, 그리고 남은 시간은 몇 분인지 궁금합니다.

예를 들어

...

now = datetime.now() 
then = some datetime object 
diff = now - then 
num 6 hour blocks = diff/6 (rounded down) 
minutes = diff % 6 

감사합니다! 당신이 seconds을 사용해야합니다

+4

질문에 대한 더 나은 설명을 해 주실 수 있습니까? 의사 코드를 작성하거나 시도한 것을 보여주십시오. – jon

+0

또는 나는 그것을 표현하는 또 다른 방법은 두 배 또는 부유물로 timedelta 객체를 다루는 방법일까요? –

+0

자신 만의 datetime 클래스를 만들 수도 있습니다. 우주를 모델링하는 방법에 따라 다르지만 일정한 초로 작업하는 것이 더 간단 할 수 있으며 각 행성은 회전 당 초 수 (주/야간주기)와 현지 별 주변 여행 당 초 수를 갖습니다. – aychedee

답변

2

timedelta 개체는 파이썬 2.7에서 total_seconds 방법이있다. 그래서 그것을 사용하여 그것을 해결할 수 있습니다. 하나의 datetime 객체를 다른 객체에서 뺄 때 timedelta 객체를 다시 얻습니다.

from datetime import timedelta 

minutes = 60 
hours = 60 * minutes 
days = 24 * hours 

diff = timedelta(days=6) 

days_in_the_past = int(diff.total_seconds()/days) 
hours_remainder = diff.total_seconds() % days 

hours_in_the_past = int(diff.total_seconds()/hours) 
seconds_remainder = diff.total_seconds() % hours 

그게 당신이하고 싶은 일입니까? 이전 버전의 Python을 사용하고 있다면 다음과 같이 total_seconds 메소드와 같은 기능을 정의 할 수 있습니다.

def total_seconds(timedelta_object): 
    return timedelta_object.days * 86400 + timedelta_object.seconds 
0

timedelta 객체는 days, secondsmicroseconds 필드가, 그래서 시간과 분에 대한 추측 :

num_blocks = diff.seconds//(6*3600) 
minutes = (diff.seconds%(6*3600))//60 
+0

정말 고마워요! –