gpt4 book ai didi

swift - 时间计算和持续时间

转载 作者:行者123 更新时间:2023-11-30 11:31:41 24 4
gpt4 key购买 nike

func timeDuration() {
let currentTimeStr = myTime()
let oldTimeStr = UserDefaults.standard.string(forKey: "myTime")

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm:ss"

let dateComponentFormatter = DateComponentsFormatter()
dateComponentFormatter.allowedUnits = [.hour, .minute]
dateComponentFormatter.unitsStyle = .short

if let currentTime = dateFormatter.date(from: currentTimeStr),
let oldTime = dateFormatter.date(from: oldTimeStr!),
let durationStr = dateComponentFormatter.string(from: oldTime, to: currentTime)
{
print(durationStr) // 2 hrs
lblDuration.stringValue = durationStr + " Ago" }

}
<小时/>
func myTime()  -> String {
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let seconds = calendar.component(.second, from: date)



return "\(hour):\(minutes):\(seconds)"
}

我在我的应用程序中使用这两个功能,基本上我的应用程序会跟踪我上次服用药物的时间。它还调用 timeDuration 函数,以便我可以显示自上次服用以来的小时数和分钟数。它在上午 12 点有一个错误,它首先将时间显示为 0.00.00,所以它弄乱了持续时间。我提供了这个的屏幕截图。另外,我尝试添加一个 if 语句来使 if hour == 0 然后将 hour 更改为 24,它显示时间为 24:00:00 但它仍然影响我的持续时间代码。任何人都可以帮忙。 enter image description here

enter image description here

您可以在下面的链接下载我的项目的源代码。 Source Code Of Project

最佳答案

您可以将时间存储为 TimeInterval,它存储为 Double:

    let timeOfDose = Date().timeIntervalSince1970
UserDefaults.standard.set(timeOfDose, forKey: "LastDose")

实现将 TimeInterval 转换为 String 的函数

    func stringFromTimeInterval(timeInterval: TimeInterval) -> NSString {

let timeIntervalInt = Int(timeInterval)

let hours = (timeIntervalInt / 3600)
let minutes = (timeIntervalInt / 60) % 60
let seconds = timeIntervalInt % 60

return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds)
}

然后您可以使用以下方法来实现:

    //Get current date/time as TimeInterval (Double)
let currentTimeInterval = Date().timeIntervalSince1970

//Get date/time of last dose as TimeInterval (Double)
let lastDoseTimeInterval = UserDefaults.standard.double(forKey: "LastDose")

//Get the difference
let durationTimeInterval = currentTimeInterval - lastDoseTimeInterval

//convert lastDoseTimeInterval to Date Object
let lastDoseDate = Date(timeIntervalSince1970: lastDoseTimeInterval)

//Initialise Date Formatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"

//Create your output Strings
let currentTimeString = dateFormatter.string(from: Date()) //eg 19:40
let lastDoseString = dateFormatter.string(from: lastDoseDate) //eg 19:32
let durationString = stringFromTimeInterval(timeInterval: durationTimeInterval) //eg 00:07:47

关于swift - 时间计算和持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com