簡體   English   中英

兩個日期之間的模塊化和時差

[英]Modular and time difference between two dates

我試圖將(day,hour,minut,seconds)轉換為2個日期的秒,產生差異,然后反轉。 我所做的基本上有效但在某些情況下會返回錯誤的結果。

輸入數據表格進行測試:

13
6 0 8 22 20 18 10 28
2 5 32 20 7 1 21 51
11 5 54 35 15 15 11 24
6 2 3 49 16 10 49 9
1 1 37 59 14 22 13 0
3 15 15 10 28 18 37 21
21 9 54 11 22 1 11 13
12 3 37 24 20 12 42 50
16 11 25 12 26 1 37 19
7 4 59 31 12 8 54 23
3 10 22 49 24 19 36 32
1 1 21 2 29 10 51 13
5 22 2 37 29 1 53 59

它總是在小時結果中返回一個錯誤的值(它增加了36)

編碼:

count=lambda a,b,c,d:a+b+c+d

def magic_date_to_numbers(a,b,c,d):
    a*=60**3
    b*=60**2
    c*=60
    return count(a,b,c,d)

def reverse_magic(n):
    a=n/(60**3)
    b=(n%(60**3))/(60**2)
    c=(((n%60**3)%60**2))/60
    d=((n%(60**3))%(60**2))%60

    print "(%s %s %s %s) "%(str(a),str(b),str(c),str(d))

for i in range(0,int(raw_input())):
    d=map(long,raw_input().split(" "))
    n1=magic_date_to_numbers(d[0],d[1],d[2],d[3])
    n2=magic_date_to_numbers(d[4],d[5],d[6],d[7])
    reverse_magic(abs(n2-n1))

謝謝 :)

已經有很好的內置函數和實用程序來處理這些類型的問題,但我認為你犯的錯誤非常簡單:一天24小時,而不是60(60 - 24 = 36)。

from datetime import timedelta

def magic_date_to_numbers(days, hours, minutes, seconds):
    t = timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
    return t.total_seconds()
    # hours += days * 24 # 24 hours in a day
    # minutes += hours * 60 # 60 minutes in an hour
    # seconds += minutes * 60 # 60 seconds in a minute
    # return seconds

def reverse_magic(n):
    t = timedelta(seconds=n)
    n = t.seconds
    seconds, minutes = n % 60, n // 60
    minutes, hours = minutes % 60, minutes // 60
    # hours, days = hours % 24, hours // 24    
    print "(%s %s %s %s) " % (t.days, hours, minutes, seconds)

for i in range(0,int(raw_input())):
    d=map(long,raw_input().split(" "))
    n1=magic_date_to_numbers(d[0],d[1],d[2],d[3])
    n2=magic_date_to_numbers(d[4],d[5],d[6],d[7])
    reverse_magic(abs(n2-n1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM