在 Python 中如何将时间转换为小时、分钟和秒的格式
作者:Jayant Verma
本教程将会讨论时间话题。不过别担心,我们讨论的不是无聊的历史话题,而是会研究如何将以秒为单位的时间转换成以“小时:分钟:秒”为单位。
接下来,我们将用“小时:分钟:秒”为单位表示时间,这也是时间的首选格式,如下:
2:46:40
让我们花一点“时间”,思考一下手头的问题。毋庸置疑,python 自带一些不错的模块,可以帮我们进行转换。但是,在使用内置模块之前,让我们先试试自己编写程序。
自定义函数以将时间转换为小时、分钟和秒
编写转换函数前,我们首先需要从数学角度思考这个问题。
如何将以秒数表示的时间转换成以首选格式表示?
您将需要获取小时、分钟和秒的值。
假设表示时间的秒数不超过一天之内秒数的总和。如果超过了,我们需要用它除以一天的总秒数,再取余数。
数学上,这表示为:
seconds = seconds % (24 * 3600)
% 运算符会输出余数。
24 * 3600是因为一小时有3600秒(60 * 60),而一天有24小时。
然后,我们可以通过秒数计算小时的值了。
- 获取小时值
为了获取小时值,我们需要用到 floor (向下取整除法)运算符(//)。
它会返回商的整数部分。
由于我们需要小时数,我们用总秒数(n)除以一小时的秒数(3600)。
数学上,这表示为:
hour = seconds // 3600
接下来,我们需要计算分钟数。
- 获取分钟值
为计算分钟值,我们需要先将总秒数除以3600,然后取余数。
数学上,这表示为:
seconds = seconds % 3600
然后,再次使用 floor 运算符,用上面的结果计算分钟值。
minutes = seconds // 60
一分钟有六十秒,所以我们向下取整秒数除以60得到的值。
得到分钟值后,我们可以开始计算时间首选格式中的秒数值了。
- 获取秒数值
为获取秒数值,我们需要再次用总秒数除以一分钟的秒数(60),然后取余数。
数学上,可以这样做:
seconds = seconds % 60
我们将从中得到时间首选格式需要的秒数。
- 完整代码
让我们把以上全部编译为一个 python 函数。
def convert_to_preferred_format(sec):
sec = sec % (24 * 3600)
hour = sec // 3600
sec %= 3600
min = sec // 60
sec %= 60
print("seconds value in hours:",hour)
print("seconds value in minutes:",min)
return "%02d:%02d:%02d" % (hour, min, sec)
n = 10000
print("Time in preferred format :-",convert(n))
输出:
seconds value in hours: 2
seconds value in minutes: 46
Time in preferred format :- 02:46:40
使用 time 模块
现在,让我们来看看 python 的一个内置模块,让我们可以仅用一行代码就将秒数转变为时间的首选格式。
在 Unix 系统中,time 模块将纪元(epoch)定义为1970年1月1日的00:00:00(取决于系统)。对于电脑来说,纪元(epoch)基本就是时间的起始点。我们可以把它视为第0天。每当我们用 time 模块转换秒数时,都会用这个纪元时间作为参考点。
如果您想在系统中输出纪元,请使用以下代码行:
time.gmtime(0)

使用以下代码将秒数表示的时间转换为首选格式:
time.strftime("%H:%M:%S", time.gmtime(n))
这行代码用“n”代表时间(以秒为单位),然后分别输出小时、分钟和秒数值。
以下是完整的 python 代码:
import time
n=10000
time_format = time.strftime("%H:%M:%S", time.gmtime(n))
print("Time in preferred format :-",time_format)
输出:
Time in preferred format :- 02:46:40
time 模块还提供了显示额外信息的选项,如日、月和年。
%a
显示当前日期是一周中第几天的缩写名%A
显示当前日期是一周中第几天的完整名%b
显示月份缩写%B
显示月份名全称%c
显示日期和时间%d
用十进制数显示月份中的日期
让我们试试用 %a
和 %b
。
import time
n=100000000000
time_format = time.strftime("Day: %a, Time: %H:%M:%S, Month: %b", time.gmtime(n))
print("Time in preferred format :-",time_format)
输出:
Time in preferred format :- Day: Wed, Time: 09:46:40, Month: Nov
使用 Datetime 模块
您还可以使用 DateTime 模块中的 timedelta 方法将用秒数表示的时间转换为首选格式。
该方法会将时间显示为自纪元以来经过的天数、小时数、分钟数和秒数。
使用 Datetime 模块将秒数时间转换为首选格式的代码如下:
import datetime
n= 10000000
time_format = str(datetime.timedelta(seconds = n))
print("Time in preferred format :-",time_format)
输出:
Time in preferred format :- 115 days, 17:46:40
结语
本教程介绍了三种不同的方法,用来将秒数表示的时间转换成用“小时:分钟:秒”。广泛来说,共有两种解决该问题的不同方法。
您可以选择编写自己的函数,或是使用 python 内置模块。本教程中,我们首先尝试了编写自己函数,然后研究了 time 和 DateTime 模块。