Swift:检查2个NSD是否相同

问题描述 投票:2回答:5

真的很简单,我确信这是一个迅速的错误。我正在尝试检查2个NSDate是否相同。即使打印输出在下面,该声明也永远不会过去

println("\(statistics.startDate) \(healthObject.date)")

if healthObject.date.isEqualToDate(statistics.startDate) 
{
      healthObject.flights =  Int(quantity.doubleValueForUnit(HKUnit.countUnit()))
      println(Int(quantity.doubleValueForUnit(HKUnit.countUnit())))
}

2015-03-30 13:56:50 +0000 2015-03-30 13:56:50 +0000

2015-03-30 13:56:50 +0000 2015-03-31 13:56:50 +0000

2015-03-31 13:56:50 +0000 2015-03-30 13:56:50 +0000

2015-03-31 13:56:50 +0000 2015-03-31 13:56:50 +0000

解决方案正如一位令人敬畏的人所指出的那样,直到亚秒级的日期都是相同的。奇怪的是,这些值是否来自HealthKit

在iOS8中对我有用的是:

   if let dif = calender?.compareDate(statistics.startDate, toDate: healthObject.date, toUnitGranularity: NSCalendarUnit.SecondCalendarUnit)
   {
      println(Int(quantity.doubleValueForUnit(HKUnit.countUnit())))
      println("\(statistics.startDate) \(healthObject.date)")
      healthObject.flights =  Int(quantity.doubleValueForUnit(HKUnit.countUnit()))

   }
ios swift nsdate
5个回答
4
投票

检查日期是否相等的最简单方法是使用NSDate.isEqualToDate()方法。

NSCalendar.currentCalendar().compareDate(date1, toDate: date2, toUnitGranularity: NSCalendarUnit.CalendarUnitSecond)

如果您使用了大量的日期算术校验this库。


2
投票

您应该能够将NSDates与==运算符(xCode 6.2)进行比较。我尝试了以下简单比较

let startDate = NSDate()
var dateComponents = NSDateComponents()           
var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var endDate = calendar!.dateByAddingComponents(dateComponents, toDate: startDate, options: nil)

if(startDate == endDate) // true here
{
    println("equal")
}

如果我更改endDate

dateComponents.second = 5
endDate = calendar!.dateByAddingComponents(dateComponents, toDate: startDate, options: nil)

if(startDate == endDate) // false here
{
    println("equal")
}

1
投票

您可以使用此扩展名:

extension NSDate
{
    func isGreaterThanDate(dateToCompare : NSDate) -> Bool
    {
        if self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
        {
            return true
        }

        return false
    }


    func isLessThanDate(dateToCompare : NSDate) -> Bool
    {
        if self.compare(dateToCompare) == NSComparisonResult.OrderedAscending
        {
            return true
        }

        return false
    }


    func isEqualToDate(dateToCompare : NSDate) -> Bool
    {    
        if self.compare(dateToCompare) == NSComparisonResult.OrderedSame
        {
            return true
        }

        return false
    }
}

扩展名可以很好的检查,例如:

var date1 : NSDate = NSDate()
var date2 : NSDate = date1.dateByAddingTimeInterval(-100)

print("\(date1)-----\(date2)\n")


if date1.isEqualToDate(date2) {
   print("date1 and date 2 are the same")

}else if date1.isLessThanDate(date2) {
   print("date 1 is less than date2")

 }else if date1.isGreaterThanDate(date2){
   print("date1 is more than date 2")
  }

只需更改您添加或减去的值。也许您必须为日期使用dateformatter


0
投票

我实际上找到了解决此问题的新方法

let calender = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
if let dif = calender?.compareDate(statistics.startDate, toDate: healthObject.date, toUnitGranularity: NSCalendarUnit.HourCalendarUnit)
     {
         println(Int(quantity.doubleValueForUnit(HKUnit.countUnit())))
         println("\(statistics.startDate) \(healthObject.date)")
         healthObject.flights =  Int(quantity.doubleValueForUnit(HKUnit.countUnit()))

     }

0
投票

круто

опоалукзаопц-уоцкшоц-поцп--оупоккошаыщщщпкущпупщуктщпзктпптщутущуптщщутпщтутзпупзптщузпщтзущтщуызутщ

© www.soinside.com 2019 - 2024. All rights reserved.