swift - 在 Swift 4 中计算时差
问题描述
如果我有两个变量,“10:30”和另一个“1:20”,有没有办法获得“2 小时和 50 分钟”它们之间的时间差?我在下面试过这个
func calcTime(time1: String,time2: String) -> String {
let time12 = (String(format: "%02d", time1))
let time22 = (String(format: "%02d", time2))
let time10 = time12.prefix(2)
let time20 = time22.prefix(2)
print("hours: \(time12)")
print("minutes: \(time22)")
let time11 = time1.suffix(2)
let time21 = time2.suffix(2)
var hours = 12 - Int(time10)! + Int(time20)!
var minutes = Int(time11)! + Int(time21)!
if minutes > 60 {
hours += 1
minutes -= 60
}
let newHours = (String(format: "%02d", hours))
let newMin = (String(format: "%02d", minutes))
return "\(newHours)hrs. \(newMin)min."
}
它并没有真正按照我想要的方式工作。
解决方案
首先,你的数学是错误的。10:30 -> 1:20 实际上是 2 小时 50 分钟。其次,您需要指定上午或下午,或使用 24 小时制(军用式)时钟。最后,解决方案是DateFormatter
将字符串转换为Date
值并使用这些值来获取时间差,然后您可以将其转换为小时/分钟。
let time1 = "10:30AM"
let time2 = "1:20PM"
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let date1 = formatter.date(from: time1)!
let date2 = formatter.date(from: time2)!
let elapsedTime = date2.timeIntervalSince(date1)
// convert from seconds to hours, rounding down to the nearest hour
let hours = floor(elapsedTime / 60 / 60)
// we have to subtract the number of seconds in hours from minutes to get
// the remaining minutes, rounding down to the nearest minute (in case you
// want to get seconds down the road)
let minutes = floor((elapsedTime - (hours * 60 * 60)) / 60)
print("\(Int(hours)) hr and \(Int(minutes)) min")
推荐阅读
- ruby-on-rails - Rufus 调度程序与带睡眠的循环
- c# - 我正在尝试在 c# 中编写一个控制台应用程序,该应用程序使用在 tomcat 上运行的 Web 服务,以使用 xml 文件执行“PUT”方法
- cookies - 如何使用 Do-Not-Track-Me cookie 禁用跟踪
- kubernetes - 集群自动扩缩器未缩减
- optimization - 冲击波跳跃条件
- c# - 从类型访问 JsonObject Title
- ios - 修改订阅时无法连接到 iTunes 商店错误
- architecture - 可以将 UML 组件图用于 3 层架构吗?
- javascript - css3 新闻标题自动向上滚动
- java - Jenkins 忽略了用于日志记录的 java 命令行选项。如何解决?