Swift 整数转换为小时/分钟/秒

swiftserver side programmingprogramming更新于 2025/9/22 13:52:17

在 Swift 中,有很多方法可以将整数转换为时间分量,例如小时、分钟和秒。每种方法都取决于具体需求。例如,您可以使用算术运算符进行转换。另一种方法是使用 DateComponentsFormatter 类轻松地将整数转换为时间分量。

在本文中,您将看到许多将整数转换为时间分量的示例。

示例 1

要将表示以秒为单位的持续时间的整数转换为小时、分钟和秒,您可以在 Swift 中使用以下代码 -

import Foundation
let durationInSeconds = 3661
let hours = durationInSeconds / 3600
let minutes = (durationInSeconds % 3600) / 60
let seconds = durationInSeconds % 60
print("Duration: \(hours) hours, \(minutes) minutes, \(seconds) seconds")

输出

Duration: 1 hours, 1 minutes, 1 seconds

此代码通过将时长除以 3600(一小时的秒数)来计算小时数,通过将时长除以 3600 后取余数再除以 60(一分钟的秒数)来计算分钟数,通过将时长除以 60 后取余数来计算秒数。

示例 2:将 60 秒转换为小时、分钟和秒

import Foundation
let durationInSeconds = 60
let hours = durationInSeconds / 3600
let minutes = (durationInSeconds % 3600) / 60
let seconds = durationInSeconds % 60
print("Duration: \(hours) hours, \(minutes) minutes, \(seconds) seconds")

输出

Duration: 0 hours, 1 minutes, 0 seconds

在本例中,时长为 60 秒,相当于 0 小时 1 分钟 0 秒。代码计算这些值并将其打印到控制台。

示例 3:使用 DateComponentsFormatter 类转换秒数

以下是使用 Swift 中 DateComponentsFormatter 类的另一种方法 -

import Foundation
let durationInSeconds = 3661
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute, .second]
formatter.unitsStyle = .full
if let formattedString = formatter.string(from: TimeInterval(durationInSeconds)) {
   print("Duration: \(formattedString)")
}

输出

Duration: 1 hour, 1 minute, 1 second

此代码使用 DateComponentsFormatter 类将时长格式化为包含小时、分钟和秒的字符串。allowedUnits 属性指定输出中应包含的单位,unitsStyle 属性则决定单位的格式化方式。在本例中,我们使用 .full 样式,其输出格式类似于"1 小时,1 分钟,1 秒"。

DateComponentsFormatter 类的 string(from:) 方法用于生成格式化的字符串。我们将时长作为 TimeInterval 传入,它是 Double 的类型别名,表示以秒为单位的时长。如果成功生成格式化的字符串,我们会将其打印到控制台。

如果您想以特定方式排列时间,或根据用户的首选地区或语言定制输出,此方法会非常有用。如果您只想计算具体的小时、分钟和秒数,这种方法可能不如之前的方法有效。

示例 4:使用时长除法的商和余数进行转换

您可以使用 divmod 函数分别计算时长(以秒为单位)除以 3600(一小时的秒数)和 60(一分钟的秒数)的商和余数。

以下是实现示例 -

import Foundation
func formatDuration(_ durationInSeconds: Int) -> String {
   let (hours, secondsAfterHours) = divmod(durationInSeconds, 3600)
   let (minutes, seconds) = divmod(secondsAfterHours, 60)
   return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
func divmod(_ numerator: Int, _ denominator: Int) -> (quotient: Int, remainder: Int) {
   let quotient = numerator / denominator
   let remainder = numerator % denominator
   return (quotient, remainder)
}
let durationInSeconds = 3661
let formattedDuration = formatDuration(durationInSeconds)
print("Duration: \(formattedDuration)")

输出

Duration: 01:01:01

formatDuration 函数接受一个长度为 DurationInSeconds 的整数作为输入,并输出以下格式的结构化文本:"hh:mm:ss",其中 hh 代表小时数,mm 代表分钟数,ss 代表秒数。

当两个数字的分子和分母相除时,divmod 函数会生成一个包含商和残差的元组。 formatDuration 函数使用此函数来确定小时、分钟和秒。

结论

总而言之,在 Swift 中,有几种方法可以将表示时长(以秒为单位)的整数转换为小时、分钟和秒。

一种方法是使用算术运算计算小时、分钟和秒的数量,然后将它们格式化为字符串。

另一种方法是使用 DateComponentsFormatter 类将时长格式化为包含小时、分钟和秒的字符串。

第三种方法是使用 divmod 函数分别计算时长(以秒为单位)除以 3600 和 60 后的商和余数。

总而言之,最合适的方法取决于应用程序的具体需求。如果您只需要计算单独的小时、分钟和秒值,则算术方法或 divmod 方法可能是最合适的。如果需要将持续时间格式化为字符串,DateComponentsFormatter 类可能更合适。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部