UIDatePicker返回错误的NSDate

MTA*_*MTA 5 iphone objective-c uidatepicker

我在我的应用程序中使用UIDatePicker,当我选择的日期:

NSDate *date = picker.date;
Run Code Online (Sandbox Code Playgroud)

picker.date 在我选择的日期前一天返回.

知道为什么会这样吗?

jrt*_*ton 8

UIDatePicker将在您当地的时区显示日期和时间.但是,NSDate没有任何时区概念,因为它存储自参考日期以来的绝对秒数.当NSLogging一个日期时,它以GMT显示日期和时间.我希望如果你从GMT计算出你当地的时区差异,你会发现它是正确的日期.

尝试使用适当的语言环境创建NSDateFormatter或NSCalendar,并通过该日期传递日期.

有关此常见主题的进一步阅读,请参阅此站点由另一个SO撰稿人撰写.

  • 没有时间就没有NSDate.你只是没有显示它.答案仍然是一样的. (2认同)

Ome*_*jua 5

试试这个为我工作

        NSDate* sourceDate = [NSDate date];

        NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
        NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

        NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
        NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
        NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

        NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 
Run Code Online (Sandbox Code Playgroud)

//我在标签上输出我可以使用你喜欢的任何东西

        NSString *dateOutput = [[[NSString alloc] initWithFormat:@"%@", destinationDate]autorelease];
        self.dateLabel.text = dateOutput;
Run Code Online (Sandbox Code Playgroud)