2016-05-30 3 views
-2

У меня есть метка времени в базе данных. Мне нужно определить, является ли печать до или после сегодняшней даты в 7 часов утра.Временная метка до или после

Как это сделать?

+0

Что вы DB? Сохраняется ли он с часовым поясом? Если нет, то какой часовой пояс я должен считать, что он находится? –

+0

Привет, будет GMT – MattBlack

+0

Это 7 часов в часовом поясе пользователя или в GMT? –

ответ

2

Вы должны быть осторожны при сравнении дат, поскольку часовой пояс может вызвать большую головную боль. NSDate всегда хранит время в часовом поясе UTC. В зависимости от летнего времени местное британское время может быть UTC + 0 или UTC + 1.

Дайте этому попытку:

// This extension is optional. It makes comparing dates easier 
extension NSDate: Comparable {} 
public func <(lhs: NSDate, rhs: NSDate) -> Bool { 
    return lhs.timeIntervalSince1970 < rhs.timeIntervalSince1970 
} 

// This part simulates the time you get from the database 
let dbCalendar = NSCalendar.currentCalendar() 
dbCalendar.timeZone = NSTimeZone(name: "GMT")! 
let timestampFromDB = dbCalendar.dateWithEra(1, year: 2016, month: 5, day: 30, hour: 10, minute: 0, second: 0, nanosecond: 0)! 

// Convert 7AM today from user's time to UTC 
let userCalendar = NSCalendar.currentCalendar() 
let todayAt7 = userCalendar.dateBySettingHour(7, minute:0, second:0, ofDate: NSDate(), options: [])! 

print(timestampFromDB < todayAt7) 
+0

Пятно на! Спасибо огромное! – MattBlack

+0

GMT никогда не меняется, это никогда не UTC + 1. Вероятно, вы имеете в виду, что время Великобритании меняется, часть года - GMT, а летом - BST (это UTC + 1). Как вы говорите, вам нужно быть осторожным с часовыми поясами ;-) – CRD

+0

@CRD Вкус моего собственного лекарства. Дань летнее время! –

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