2009-12-27 134 views
9
enter time-1 // eg 01:12 
enter time-2 // eg 18:59 

calculate: time-1 to time-2/12 
// i.e time between 01:12 to 18:59 divided by 12 

它如何在Python中完成。我是初学者,所以我真的不知道从哪里开始。计算时间1到时间2之间的时间?

编辑添加:我不想要一个计时器。用户手动输入时间1和时间2。

在此先感谢您的帮助。

回答

15

datetimetimedelta类从内置的datetime模块是你所需要的。

from datetime import datetime 

# Parse the time strings 
t1 = datetime.strptime('01:12','%H:%M') 
t2 = datetime.strptime('18:59','%H:%M') 

# Do the math, the result is a timedelta object 
delta = (t2 - t1)/12 
print(delta.seconds) 
+0

delta =(t2 - t1)/ 12 TypeError:不支持的操作数类型为/:'datetime.timedelta'和'int' – 3zzy 2009-12-27 05:49:11

+0

python 2.6中可以使用 但是,您始终可以将timedelta对象转换为整数并进行如下计算:delta.seconds/12 – iamamac 2009-12-27 06:40:25

5

下面是计时代码执行的计时器。也许你可以用它来达到你想要的。 time()返回自1970-01-01 00:00:00以来的当前时间,以秒和微秒为单位。

from time import time 
t0 = time() 
# do stuff that takes time 
print time() - t0 
+0

不,我想时间-1和时间之间的时间来计算-2,都是手动输入的。 – 3zzy 2009-12-27 04:56:45

+0

正是我想到的! ....为此欢呼! – Arkapravo 2010-07-10 11:42:54

0

假设用户正在输入的字符串等"01:12",需要转换(以及有效)这些字符串到的分钟数,因为00:00(例如,"01:12"1*60+12,或72分钟),然后再减去一个从另一个。然后,您可以将差值以分钟为单位转换回hh:mm形式的字符串。

6

最简单,最直接的可能是这样的:

def getime(prom): 
    """Prompt for input, return minutes since midnight""" 
    s = raw_input('Enter time-%s (hh:mm): ' % prom) 
    sh, sm = s.split(':') 
    return int(sm) + 60 * int(sh) 

time1 = getime('1') 
time2 = getime('2') 

diff = time2 - time1 

print "Difference: %d hours and %d minutes" % (diff//60, diff%60) 

例如,一个典型的运行可能是:

$ python ti.py 
Enter time-1 (hh:mm): 01:12 
Enter time-2 (hh:mm): 18:59 
Difference: 17 hours and 47 minutes 
+1

+1,因为与使用datetime和timedelta相比,这是学习python的人更好的方法。我更喜欢比's','sh'和'sm'更具表现力的变量名称。 Alex,为什么要使用变量'prom'?为什么不用参数调用函数? – 2009-12-27 11:30:09

+1

@Raja,呵呵,我的意思是在两种情况下给出不同的提示,但后来我忘了在提示中使用'prom' - 修正了。至于变量名,对于极小范围的变量,很小的名字是合适的 - 那些已经被教过来命名这样的2行变量变量'stringAsInputByTheUser','hours_in_string_form'等的类,并且从未接触过这个重要的变量关于范围的区分,应该开始接触到这个问题。 – 2009-12-27 15:36:09