检查时间是否在范围内

11 浏览
0 Comments

检查时间是否在范围内

在应用程序中,我从核心数据中获取一个值(该值是一个日期),并将其与时间(格式为字符串)进行比较,并根据情况执行操作。然而,出于某种原因,if语句似乎无法正常工作。无论是什么时间,结果始终使用value1(时间为0:00至5:30)进行除法(请检查下面的代码)。我已经检查了核心数据获取是否具有正确的名称,是的,它应该正常工作。有人有任何想法吗?

func calculate() {

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

let managedContext = appDelegate.managedObjectContext

let fetchRequest = NSFetchRequest(entityName: "Settings")

do {

let results = try managedContext.executeFetchRequest(fetchRequest)

Settings = results as! [NSManagedObject]

for result in results as! [NSManagedObject] {

correctionRatio = result.valueForKey("correctionRatio") as! Int

target = result.valueForKey("targetbG") as! Int

value1 = result.valueForKey("value1") as! Int

value2 = result.valueForKey("value2") as! Int

value3 = result.valueForKey("value3") as! Int

value4 = result.valueForKey("value4") as! Int

value5 = result.valueForKey("value5") as! Int

if bGTextfield.text != "" && carbTextfield.text != "" {

current = Int(bGTextfield.text!)

carb = Int(carbTextfield.text!)

let currentTime = NSDate()

let timeFormatter = NSDateFormatter()

timeFormatter.locale = NSLocale.currentLocale()

timeFormatter.dateFormat = "HH:mm"

let time = timeFormatter.stringFromDate(currentTime)

if time > "00:00" && time < "5:30" {

food = carb / value1

} else if time > "5:31" && time < "11:00"{

food = carb / value2

} else if time > "11:01" && time < "17:00"{

food = carb / value3

} else if time > "17:01" && time < "21:30" {

food = carb / value4

} else if time > "21:31" && time < "23:59" {

food = carb / value5

}

if 4 ... 9 ~= Double(currentbG){

doseLabel.text = String(foodInsulin)

} else if 9.1 ... 100 ~= Double(currentbG) {

bgDiff = currentbG - targetbG

correction = bgDiff / correctionRatio

total = food + correctionInsulin

doseLabel.text = String(total)

}

}

}

}

}

谢谢。

0
0 Comments

这段代码的目的是检查给定的时间是否在指定的时间范围内。它首先将传入的NSDate对象转换为整数表示,然后比较这些整数来判断时间是否在范围内。

代码中的timeAsIntegerFromDate函数将NSDate对象转换为整数表示。它使用当前的日历和时区来获取日期的小时和分钟,并将它们乘以100后相加得到整数表示。

timeIsBetween函数接受两个NSDate对象作为参数,表示时间范围的开始和结束时间。它首先调用timeAsIntegerFromDate函数将这些日期转换为整数表示。然后它获取当前时间,并将其转换为整数表示。接下来,它使用一些逻辑来判断当前时间是否在时间范围内。如果开始时间和结束时间相同,则返回false。如果开始时间小于结束时间,则判断当前时间是否大于等于开始时间且小于结束时间。如果开始时间大于结束时间,则判断当前时间是否大于等于开始时间或小于结束时间。

这段代码的问题在于它使用了NSDate对象和日期计算,这在Swift中已被废弃。建议使用新的Date结构和Calendar来进行日期和时间的计算。

下面是改进后的代码:

private class func timeIsBetween(startDate: Date, endDate: Date) -> Bool {

let calendar = Calendar.current

let now = Date()

let startTime = calendar.dateComponents([.hour, .minute], from: startDate)

let endTime = calendar.dateComponents([.hour, .minute], from: endDate)

let nowTime = calendar.dateComponents([.hour, .minute], from: now)

guard let startHour = startTime.hour, let startMinute = startTime.minute,

let endHour = endTime.hour, let endMinute = endTime.minute,

let nowHour = nowTime.hour, let nowMinute = nowTime.minute else {

return false

}

let startTimeInMinutes = startHour * 60 + startMinute

let endTimeInMinutes = endHour * 60 + endMinute

let nowTimeInMinutes = nowHour * 60 + nowMinute

if startTimeInMinutes == endTimeInMinutes {

return false

} else if startTimeInMinutes < endTimeInMinutes {

return nowTimeInMinutes >= startTimeInMinutes && nowTimeInMinutes < endTimeInMinutes

} else {

return nowTimeInMinutes >= startTimeInMinutes || nowTimeInMinutes < endTimeInMinutes

}

}

这段代码使用了新的Date结构和Calendar来进行日期和时间的计算。它首先获取当前时间,并将开始时间和结束时间分别转换为小时和分钟的组件。然后,它将这些时间转换为分钟表示,并使用类似的逻辑来判断当前时间是否在时间范围内。

这样改进的代码更加简洁和可读,并且使用了推荐的日期和时间处理方法。它可以更好地满足检查时间是否在范围内的需求。

0
0 Comments

问题的出现原因是在进行时间比较时,使用了字符串比较而不是数字比较,这会导致不准确的结果。虽然可以对字符串进行比较,但比较规则与数字比较不同。

解决方法是使用正确的比较方式进行时间比较。可以先使用代码let components = NSCalendar.currentCalendar().componentsInTimeZone(NSTimeZone.localTimeZone(), fromDate: NSDate())获取时间的各个组成部分。然后,components会有名为hourminute的数字属性,可以使用这些属性进行比较。

0
0 Comments

问题的出现原因:代码中使用了错误的比较方法,尝试使用">"和"<"操作符来比较时间。同时,时间被存储为字符串,而不是日期类型。

解决方法:根据提供的链接,正确比较时间的方法是将时间存储为日期类型,并使用Date类型的比较方法。这样可以确保正确比较时间的区间。

以下是整理后的文章:

在代码中,我猜测你不能使用">"和"<"操作符来比较时间。在这个Stack Overflow的帖子中,解释了如何正确比较时间。

另外,你将时间存储为字符串而不是日期。建议你将时间存储为日期类型。

有人回答说这并不是我要找的答案。因为我想要判断当前时间是否在某个范围内。

在你的if语句中进行了比较测试。你使用">"和"<"操作符来比较两个字符串,这是不起作用的。

因此,你需要根据提供的链接,将时间存储为日期类型,并使用Date类型的比较方法。这样可以确保正确比较时间的区间。

0