2012-05-21 63 views
2

我搜索了論壇,並有不少關於UIDatePicker的奇怪行爲的帖子,但沒有解決方案解決了我的問題。UIDatePicker的時間返回非常奇怪的結果

我有一個簡單的UIDatePicker這樣初始化:

self.picker = [[UIDatePicker alloc] init]; 
self.picker.datePickerMode = UIDatePickerModeTime; 
self.picker.calendar = [NSCalendar currentCalendar]; 
self.picker.timeZone = [NSTimeZone localTimeZone]; 
self.picker.date = self.initialDate; 
[self.view addSubview:self.picker]; 

這在一個簡單的視圖(沒有XIB,沒有界面生成器,只是簡單的代碼)的viewDidLoad方法完成。

現在我有一個按鈕,它檢索日期並「處理」它。由於日期選擇器不允許用戶設置秒,我只想將它們重置爲零(因爲我需要稍後比較日期)。因爲日期選擇器不允許用戶設置秒,所以我只想將它們重置爲零。

當我選擇「16:00」(這是下午4:00)日誌輸出是:

2012-05-21 17:43:48.428 Green Thumb[26828:fb03] 0001-01-01 14:55:36 +0000 
2012-05-21 17:43:48.428 Green Thumb[26828:fb03] 0001-01-01 16:00:56 +0000 
2012-05-21 17:43:48.429 Green Thumb[26828:fb03] 0001-01-01 16:00:00 +0000 
2012-05-21 17:43:48.429 Green Thumb[26828:fb03] 0001-01-01 14:54:40 +0000 

因此,從選擇器拍攝的原始日期是完全關閉。組件(根據拾取器日期創建的)所用的時間是正確的,修正時間也是如此。但是當我把這些組件放回到NSDate實例中時,它們都會再次混亂(但不同)。

我和谷歌我們都沒有想法,所以我希望我們可以在這裏創建一些新的!

由於提前,LetzFlow

PS:我的iPhone 5.1模擬器測試這一點。

編輯#1:

我已經找到了實際的問題,但我又堅持:

我跟蹤它到以下一點:我存儲的具體日期, NSUserDefaults對象。

NSUserDefaults defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setValue:[NSNumber numberWithFloat:[time timeIntervalSince1970]] forKey:@"notification.time"]; 

在這裏,我又弄出來了:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSNumber num = [defaults valueForKey:@"notification.time"]; 
NSDate* time = [NSDate dateWithTimeIntervalSince1970:[num floatValue]]; 

足夠有趣:我所付出的,是不是有什麼出來!但爲什麼? :)

編輯#2: 最後但並非最不重要我已經解決它自己。謝天謝地,因爲這是有史以來最愚蠢的錯誤。 NSTimeInterval不是浮點數,而是雙精度浮點數。而直到現在,我從來沒有遇到任何問題,使用浮動保存在NSUserDefaults似乎已經提出了錯誤。

回答

0

您的NSLog語句似乎有錯誤的格式(即「0001-01-01」部分)。試試這個:

NSString *output = [NSDateFormatter localizedStringFromDate:selected 
                dateStyle:NSDateFormatterShortStyle 
                timeStyle:NSDateFormatterShortStyle]; 

NSLog(@"%@", output);