如果不是由用户使用Python datetime设置的,如何将微秒设置为零?

如果不是由用户使用Python datetime设置的,如何将微秒设置为零?,python,python-datetime,Python,Python Datetime,我试图接受用户输入,并从该字符串创建一个时间对象。大概是这样的: import datetime user_input = '14:24:41.992181' time = datetime.datetime.strptime(user_input, '%H:%M:%S.%f').time() 但是,假设用户输入是'14:24:41',那么我会得到一个格式错误,这是可以理解的。我想做的是,对于这样的输入,时间对象的微秒精度将自动设置为000000。我注意到使用%z对时区做了类似的操作,它内置于

我试图接受用户输入,并从该字符串创建一个时间对象。大概是这样的:

import datetime
user_input = '14:24:41.992181'
time = datetime.datetime.strptime(user_input, '%H:%M:%S.%f').time()
但是,假设
用户输入是
'14:24:41'
,那么我会得到一个格式错误,这是可以理解的。我想做的是,对于这样的输入,时间对象的微秒精度将自动设置为
000000
。我注意到使用
%z
对时区做了类似的操作,它内置于
strtime()
方法中


理想的方法是什么

当用户输入与格式字符串不匹配时,可以使用try/except并处理该情况

import datetime
user_inputs = ['14:24:41.992181','14:24:41']
for user_input in user_inputs:
    try:
        dt = datetime.datetime.strptime(user_input, '%H:%M:%S.%f')
    except ValueError:
        dt = datetime.datetime.strptime(user_input, '%H:%M:%S')
    print(dt.strftime('%H:%M:%S.%f'))
输出

14:24:41.992181
14:24:41.000000

当用户输入与格式字符串不匹配时,可以使用try/except并处理该情况

import datetime
user_inputs = ['14:24:41.992181','14:24:41']
for user_input in user_inputs:
    try:
        dt = datetime.datetime.strptime(user_input, '%H:%M:%S.%f')
    except ValueError:
        dt = datetime.datetime.strptime(user_input, '%H:%M:%S')
    print(dt.strftime('%H:%M:%S.%f'))
输出

14:24:41.992181
14:24:41.000000

您可以对输入字符串的长度运行一个简单的检查,假设您需要标准化的输入

user_input = '14:24:41'
if len(user_input) == 8:
    user_input += '.000000'
time = datetime.datetime.strptime(user_input, '%H:%M:%S.%f').time()

您可以对输入字符串的长度运行一个简单的检查,假设您需要标准化的输入

user_input = '14:24:41'
if len(user_input) == 8:
    user_input += '.000000'
time = datetime.datetime.strptime(user_input, '%H:%M:%S.%f').time()

您可能需要注意的是,预期会更频繁发生的情况应该放在
try
块中。
try..except
通常比
if
检查调用是否成功快,但如果实际输入了
except
块(这很好,因为异常应该是异常事件,因此很少发生)。谢谢,这是非常优雅的。您可能需要注意,预期会更频繁发生的情况应该放在
try
块中。
try..except
通常比
if
检查调用是否成功快,但如果实际输入了
except
块(这很好,因为异常应该是异常事件,因此很少发生)。谢谢,这非常优雅。