在Swift中如何计算两个Unix时间戳的分钟差值?
计算两个Unix Epoch时间的分钟差值问题解决
嘿,我来帮你搞定这个时间差值计算的问题!你已经写好了不错的Date扩展来处理毫秒级时间戳,现在只需要调整代码细节,就能精准得到预期的9分钟差值啦。
问题根源
你之前的代码里存在单位不统一的问题:currentTime是毫秒级的整数(通过millisecondsSince1970获取),但startedTinme是转成了秒级的TimeInterval,两者直接计算差值会导致单位混乱,自然得不到准确结果。
修正方案一:用Date对象优雅处理
利用你已经写好的Date扩展,我们可以把时间戳都转成Date实例,再计算间隔:
// 你已经定义好的Date扩展 extension Date { var millisecondsSince1970: Int { return Int((self.timeIntervalSince1970 * 1000.0).rounded()) } init(milliseconds: Int) { self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000) } } // 服务器返回的毫秒时间戳(对应下午5:03) let serverTimestamp = 1552086180000 let startTime = Date(milliseconds: serverTimestamp) // 获取当前时间 let currentTime = Date() // 计算时间间隔(秒级) let timeInterval = currentTime.timeIntervalSince(startTime) // 直接计算分钟差值(如果需要整数可以用rounded()或Int()转换) let minuteDifference = timeInterval / 60 print("分钟差值:\(minuteDifference)") // 预期输出接近9.0 // 用格式化工具输出友好的结果 let formatter = DateComponentsFormatter() formatter.allowedUnits = [.minute, .second] formatter.unitsStyle = .abbreviated if let formattedString = formatter.string(from: timeInterval) { print("格式化后的差值:\(formattedString)") // 会输出类似"9 min"或"9 min 0 sec" }
修正方案二:直接用时间戳数值计算(保证单位统一)
如果你不想用Date对象,也可以直接对毫秒数值进行计算,只要保证两个时间戳单位一致:
// 你已经定义好的Date扩展 extension Date { var millisecondsSince1970: Int { return Int((self.timeIntervalSince1970 * 1000.0).rounded()) } } let currentMillis = Date().millisecondsSince1970 let serverMillis = 1552086180000 // 毫秒差值转分钟:差值除以(1000毫秒/秒 * 60秒/分钟) let minuteDiff = Double(currentMillis - serverMillis) / (1000 * 60) print("分钟差值:\(minuteDiff)") // 同样会得到9左右的结果
核心要点
不管用哪种方式,统一时间戳的单位是关键:要么都用毫秒,要么都转成秒,再进行差值计算,最后除以60(秒转分钟)或60000(毫秒转分钟)就能得到准确的分钟数啦。
内容的提问来源于stack exchange,提问作者Amit Pal
相关产品推荐
相关产品推荐

