2016-05-30 10 views
-2

私はデータベースにタイムスタンプを持っています。私は切手が今日の午前7時の前か後かを判断する必要があります。タイムスタンプ

どうすればよいですか?

+0

あなたのDBは何ですか?それはタイムゾーンで保存されていますか?そうでない場合は、どのタイムゾーンに入ると仮定すべきですか? –

+0

こんにちはGMT – MattBlack

+0

ユーザーのタイムゾーンまたはGMTの午前7時ですか? –

答えて

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自分の薬の味です。その夏時間をダン! –