2013-04-21 114 views
1

菜鳥在這裏,Python的轉換軍用時間用戶輸入和計算工作時間(datetime.timedelta)

我被困在試圖呈現用戶輸入軍用時間爲標準時間。代碼工作,到目前爲止,但我需要從結束時間在標準時間顯示減去12小時。我如何使用datetime.time來做到這一點?另外,我需要原始用戶輸入轉換爲整數來進行datetime.timedelta計算?前面的問題似乎並沒有回答我的代碼問題。

我的代碼是:

def timeconvert(): 
    print "Hello and welcome to Python Payroll 1.0." 
    print "" 
    # User input for start time. Variable stored. 
    start = raw_input("Enter your check-in time in military format (0900): ") 
    # User input for end time. Variable stored. 
    end = raw_input("Enter your check-out time in military format (1700): ") 
    print "" 

    # --------------------------------------------------------------------------- 
    # Present user input in standard time format hhmm = hh:mm 
    # --------------------------------------------------------------------------- 
    import datetime, time 
    convert_start = datetime.time(hour=int(start[0:2]), minute=int(start[2:4])) 
    # need to find a way to subtract 12 from the hour to present end time in standard time 
    convert_end = datetime.time(hour=int(end[0:2]), minute=int(end[2:4])) 
    print 'You started at', convert_start.strftime("%H:%M"),'am', 'and ended at', convert_end.strftime("%H:%M"), 'pm' 

    # --------------------------------------------------------------------------- 
    # Use timedelta to caculate time worked. 
    # --------------------------------------------------------------------------- 
    # print datetime.timedelta 
timeconvert() 
raw_input("Press ENTER to exit program") # Closes program. 

感謝。

回答

2

您可以使用strftime("%I:%M %p")來獲得標準的12小時,「AM」或「PM」結尾的格式。對datetime字符串格式化;詳情請參閱Python documentation

此外,雖然它不是本機支持的,但您可以簡單地使用兩個datetime.time實例來計算作爲timedelata構造函數的一部分。

下面的代碼就足夠了,但正確的錯誤檢查絕對應該使用。 ;)
留學美國相關考試

start = raw_input("Enter your check-in time in military format (0900): ") 
end = raw_input("Enter your check-out time in military format (1700): ") 

# convert user input to datetime instances 
start_t = datetime.time(hour=int(start[0:2]), minute=int(start[2:4])) 
end_t = datetime.time(hour=int(end[0:2]), minute=int(end[2:4])) 
delta_t = datetime.timedelta(
    hours = (end_t.hour - start_t.hour), 
    minutes = (end_t.minute - start_t.minute) 
    ) 

# datetime format 
fmt = "%I:%M %p" 
print 'You started at %s and ended at %s' % (start_t.strftime(fmt), end_t.strftime(fmt)) 
print 'You worked for %s' % (delta_t) 
+0

啊哈,我明白注意#2的文檔中,現在我看到的格式作品的一個例子。我一定會使用錯誤檢查。非常感謝。 – Codesurfer 2013-04-21 13:56:18

0
def time12hr(string): 
    hours = string[:2] 
    minutes = string[2:] 
    x = " " 
    if int(hours) == 12: 
     x = "p.m." 
     hours = "12" 
    elif int(hours) == 00: 
     x = "a.m." 
     hours = "12" 
    elif int(hours) > 12: 
     x = "p.m." 
     hours = str(int(hours) - 12) 
    else: 
     x = "a.m." 
    return "%s:%s %s"%(hours ,minutes,x) 
print time12hr('1202') 
print time12hr('1200') 
print time12hr('0059') 
print time12hr('1301') 
print time12hr('0000')