时间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];
这是在一个简单视图的viewDidLoad方法中完成的(没有xib,没有接口构建器,只是简单的代码)。
现在我有一个按钮,它检索日期并“处理”它。
NSDate* selected = self.picker.date;
NSLog(@"%@", selected);
NSDateComponents* components = [self.picker.calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:selected];
NSLog(@"0001-01-01 %02i:%02i:%02i +0000", components.hour, components.minute, components.second);
[components setSecond:0];
NSLog(@"0001-01-01 %02i:%02i:%02i +0000", components.hour, components.minute, components.second);
selected = [self.picker.calendar dateFromComponents:components];
NSLog(@"%@", selected);
由于日期选择器不允许用户设置秒,我只想将它们重置为零(因为我需要稍后比较日期)。
当我选择“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似乎已经提出了错误。
你的NSLog语句似乎有错误的格式(即“0001-01-01”部分)。 试试这个:
NSString *output = [NSDateFormatter localizedStringFromDate:selected
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", output);
链接地址: http://www.djcxy.com/p/85173.html