2016-08-20 2 views
1

Я пытаюсь сравнить две даты в день в быстром. После этого solution написал следующий код:Дата сравнения возвращение неправильного значения? (swift)

let workoutdate: NSDate = participantdata[self.lastindexchecked].workout!.start! 
let todaysdate = NSDate() 
let order = NSCalendar.currentCalendar().compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day) 

switch order { 
case .OrderedDescending: 
    print("DESCENDING") 
case .OrderedAscending: 
    print("ASCENDING") 
case .OrderedSame: 
    print("SAME") 
} 

Однако этот код, кажется, не всегда возвращаются к желаемому результату.

todaysdate равна:

2016-08-20 20:51:26 +0000 

Когда WorkoutDate равна:

2016-08-20 00:14:53 +0000 

Результатом является "DESCENDING"

Однако, когда дата тренировки установлен в другой, например,

2016-08-20 04:00:00 +0000 

Результат действительно «ТО ЖЕ», как и было предсказано.

У кого-нибудь есть идеи, что происходит?

ответ

1

NSDate является фундаментальной конструкцией в Фонде, поэтому ошибки, подобные этому, были обнаружены и исправлены давно. Прежде чем вы подумаете, что это ошибка Apple, сначала подумайте о своей собственной ошибке. И большая часть головной боли связана с датами, связанными с часовым поясом.

Я в EDT (-0400) часовой пояс так:

todaysdate = 2016-08-20 20:51:26 +0000 = 2016-08-20 16:51:26 -0400 
workoutdate = 2016-08-20 00:14:53 +0000 = 2016-08-19 20:14:53 -0400 

Вы можете увидеть, как при выраженном в моем часовом поясе, они попадают в разные дни и DESCENDING это именно то, что здесь ожидается.

Вы можете решить эту проблему несколькими способами, установив календарь, чтобы всегда использовать GTM:

let calendar = NSCalendar.currentCalendar() 
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
let order = calendar.compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day) 
+0

Извинения для формулировки вопроса, как если бы это было яблоко bug- это не было моим намерением. Я неправильно предположил, что +0000 указал часовой пояс, что, по-видимому, не так. Большое спасибо. – ABC

Смежные вопросы