Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:检查两个NSDATE是否相同_Ios_Swift_Nsdate - Fatal编程技术网

Ios Swift:检查两个NSDATE是否相同

Ios Swift:检查两个NSDATE是否相同,ios,swift,nsdate,Ios,Swift,Nsdate,非常简单的一个,我确信这是swift中的一个bug。我正在检查两个NSDate是否相同。即使打印输出在下面,此声明也从未通过 println("\(statistics.startDate) \(healthObject.date)") if healthObject.date.isEqualToDate(statistics.startDate) { healthObject.flights = Int(quantity.doubleValueForUnit(HKUnit.c

非常简单的一个,我确信这是swift中的一个bug。我正在检查两个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-3113:56:50+0000 2015-03-3113:56:50+0000

解决方案 正如回答的一位令人敬畏的人所指出的那样,在亚秒级之前,日期可能是相同的。奇怪的是,这些值来自健康套件

在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()))

   }

您可以使用此扩展:

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

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


如果您正在使用相当多的日期算术检查库。

我实际上找到了这个新方法来解决这个问题

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()))

     }

您应该能够将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")
}
如果我更改了结束日期

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

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

我正在使用它,但它的返回值为false,尽管打印输出显示它们与次秒级别相比是相同的。我认为你们的约会在亚秒级是不同的。如果您想在更高级别进行比较,请检查NSCalendar API。特别是与之相比。我更改了答案以反映它。只是尝试了一个非常简单的答案,似乎可以只使用NSDate()==NSDate(),因此实际上您要检查两个NSDate是否在同一个小时内,而不是它们是否相同。如果您在问题中澄清这一点,对未来的读者将非常有用。不,但这是一个解决办法,虽然时间通过healthkitNSDate表示一个绝对时间点,但亚秒可能是不同的事件。如果两个NSDATE相差0.01秒,则它们是不同的。
dateComponents.second = 5
endDate = calendar!.dateByAddingComponents(dateComponents, toDate: startDate, options: nil)

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