简体   繁体   中英

Convert human readable time to epoch timestamp in Python

I am training to convert human readable time to epoch time. This is my test case

import time
text = '12.12.2020'
format = ['%d/%m/%Y','%m/%d/%Y','%d-%m-%Y','%m-%d-%Y','%d.%m.%Y','%m.%d.%Y','%d%m%Y','%m%d%Y']
for fmt in format:
        try:
            epoch = int(time.mktime(time.strptime(text,fmt)))
            print (epoch)
            break
        except ValueError:
            print('invalid input')

This above code prints 4 time "invalid input" then 5th line prints correct epoch value, Because my text='12.12.2020' input string meets 5th condition. I need to print if my "text" condition meets any of those format then print only epoch value, otherwise print "invalid input". Could anyone help me to solve this? Thanks in advance.

First things first, I'd highly suggest not using the keyword format as a variable name due to it being a built-in function from Python itself ( https://docs.python.org/3/library/functions.html ). This is called bad practice when assigning variable names.


Anyway, regarding your problem: Your approach isn't so far off - you were missing a slight change:
 import time format_list = ['%d/%m/%Y','%m/%d/%Y','%d-%m-%Y','%m-%d-%Y','%d.%m.%Y','%m.%d.%Y','%d%m%Y','%m%d%Y'] text = '12.1s2.2020' for fmt in format_list: try: epoch = int(time.mktime(time.strptime(text,fmt))) break except: epoch = 'invalid input' pass

This iterates through your format_list and tries assigning the converted time to the variable epoch . Instead of printing 'invalid error', as you did, I just assign it to epoch , hence if the for-loop went through all eight possibilities without succeeding, epoch equals 'invalid input' . However, if the statement epoch = int(time.mktime(time.strptime(text,fmt))) is true the for-loop breaks, hence the last assignment, being the proper value you wanted, lasts.

You may output epoch via the print() function:

 print(epoch)

The output in this case is: 1607727600 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM