2024-04-19 03:21:48 发布
网友
我有一个应用程序,我需要解析四种不同格式的时间戳。在
HH:MM:SS HH:MM:SS.mm MM:SS MM:SS.mm
如何编写一个函数来将这些格式解析为timedelta对象?在
timedelta
我尝试过逐个迭代字符,当我看到:时,break进行迭代,但是我的代码一团糟,所以我宁愿不把它作为基线。在
:
break
下面是一种使用datetime.datetime.strptime()完成此操作的方法:
datetime.datetime.strptime()
如果您事先不知道您的输入将在哪个format中,可以尝试将它们全部包装在try/catch块中。在
try
catch
strptime()返回一个datetime对象,因此调用.time()函数只获取时间部分。有关详细信息,请参见this post。在
strptime()
datetime
.time()
import datetime def parse_timestamp(ts): formats = [ "%H:%M:%S", #HH:MM:SS "%H:%M:%S.%f", #HH:MM:SS.mm "%M:%S", #MM:SS "%M:%S.%f" #MM:SS.mm ] for f in formats: try: return datetime.datetime.strptime(ts, f).time() except ValueError: pass return None
示例:
输出:
12:34:56 12:34:56.780000 00:34:56 00:34:56.780000
或者,如果您知道具体的格式,您可以直接使用datetime.datetime.strptime(ts, f).time()。在
datetime.datetime.strptime(ts, f).time()
更新1
如果要转换为timedelta,可以使用parse_timestamp()的输出和^{} constructor进行转换:
parse_timestamp()
def time_to_timedelta(t): td = datetime.timedelta( seconds=t.second, microseconds=t.microsecond, minutes=t.minute, hours=t.hour ) return td
这里有一个related post,你可能也会觉得有用。在
下面是一种使用
datetime.datetime.strptime()
完成此操作的方法:如果您事先不知道您的输入将在哪个format中,可以尝试将它们全部包装在
try
/catch
块中。在strptime()
返回一个datetime
对象,因此调用.time()
函数只获取时间部分。有关详细信息,请参见this post。在示例:
^{pr2}$输出:
或者,如果您知道具体的格式,您可以直接使用
datetime.datetime.strptime(ts, f).time()
。在更新1
如果要转换为} constructor 进行转换:
timedelta
,可以使用parse_timestamp()
的输出和^{这里有一个related post,你可能也会觉得有用。在
相关问题 更多 >
编程相关推荐