Swift 整数转换为小时/分钟/秒
在 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 传递,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 类可能更合适。