本地通知的通知時間NSDate相關問題1

今天做了一個關于關于本地推送的功能,調試很長時間,一開始是因為有一個NSDateFormatter 對象沒有設置格式“YYYY-MM-dd”,后來發現,時分秒的給事是“HH:mm:ss”(ps:小時的雙H要大些)

這些旁枝末節搞定之后,主要是因為NSDate的時差問題了。因為系統默認的NSDate的當前時間和我們實際上是有8個小時的時差的(這應該是因為我們中國和英國的本初子午線差8個時區),但這只是打印出來的顯示效果上的差異(這是我后來發現的,不知道是不是正確,求證?)。也就是說,打印出來的默認時間會比我們現實中的時間慢8個小時,但實際上我們和英國佬是在同一個時間點上的,只是我們兩個地方時鐘顯示的時間不一樣罷了(不知道這么說,夠不夠清楚)。

那么現在問題就來了,我做本地推送功能的時候要給推送設置一個fireDate

UILocalNotification *notification = [[UILocalNotification alloc] init];

NSDate *date =[ [NSDate date] dateByAddingTimeInterval:10.0f]; //當前時間后的10秒鐘,開始發送本地通知

notification.fireDate= date;

這就是設置什么時候發送通知。如果運行這幾行代碼的時間是 早上 12:00:00 ,那么date的打印出來的時間就是 4:00:10。

我做得時候就把這個date打印出來了,發現跟我預想的不太一樣,這個4:00:10是不是意味著要等到手機的系統時間是4:00:10才會發送通知呢。于是 為了消除這個時差,我上網找到了消除時差的方法(請自行搜索)。消除了之后,我打印出來的date終于和我手機上的時間一樣了,也就是說消除時差后,date打印出來的是 12:00:10。好了,現在我以為我能夠放心的運行了。但是運行了之后,我一直等,一直等,都等不到本地通知的推送出現。我就奇怪了,代碼明明是沒有問題的,為什么會有不發送通知呢?

花了一段時間,我終于搞清楚了。解決的辦法就是:刪掉消除時差的代碼,也就是date打印出來是 4:00:10時候的代碼。

所以我覺得,雖然系統默認打印出來的當前時間[NSDate date]或許與我們的現實中的時間顯示的時間不一樣,但是對應的都是同一個時間點,而系統用的時自己的那一套時間,所以我們的12:00:00是系統的4:00:00,但是系統的12:00:00卻是我們的20:00:00。

總結一下:在只為了顯示時間數據的時候,我們可以利用消除時差后的date來作為顯示。 而如果是為了利用某個時間點來實現某一功能的時候(比如上面所說,用時間來確定發送本地通知的時間),那么久使用系統自帶的date就可以了,不必勞神我們消除時差。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容