NSDate的日期方法返回错误的时间

时间:2016-07-16 11:36:25

标签: ios objective-c datepicker timezone nsdate

简单的问题,恼人的问题。 我有一个日期选择器,我选择一个时间(比如上午11点)。然后是一个连接到方法的按钮,该方法将该时间打印到控制台。字面上只是一个五行项目。打印到控制台的时间比我设置的时间提前一小时显示(因此,如果我设置为上午11点,它会打印上午10点,依此类推)。我的Mac上的时区设置正确,时钟显示正确的时间。我已经看过Stack Overflow并且已经看到了一些涉及NSCalendar和组件等的非常长的答案......但我很确定这应该是一个单行的东西。在我继续设置我的mac之前请帮忙。感谢

----------------------------------------------- - - - - - - - - 编辑 - - - - - - - - - - - - - - - - - -----------------------------

好的,我会发布一些代码,看看它是否更清晰:

- (IBAction)setReminder:(id)sender{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *dateString = [formatter stringFromDate:self.datePicker.date];


    NSLog(@"Setting a reminder for: %@", dateString);

    NSDate *date = [formatter dateFromString:dateString];

    NSLog(@"another proof that date is right: %@", date);

    UILocalNotification *note = [[UILocalNotification alloc]init];
    note.alertBody = @"This is a reminder!";
    note.fireDate = date;

    [[UIApplication sharedApplication] scheduleLocalNotification:note];}

第一个NSLog返回正确的时间,但第二个NSLog使用datepicker设置的小时提前一小时返回,因此通知永远不会被触发。我究竟做错了什么? TX

2 个答案:

答案 0 :(得分:0)

日期选择器始终以UTC格式返回日期。

创建一个dateformatter并获取它将显示预期时间的字符串。

答案 1 :(得分:-1)

请使用它,它会帮助你

NSDateFormatter *formattor=[[NSDateFormatter alloc]init];
formattor.dateFormat=@"yyyy-MM-dd HH:mm:ss";
NSString *date_string=[formattor stringFromDate:self.datePicker.date];
NSLog(@"%@",date_string);