UIDatePicker给出了错误的时间

时间:2013-01-27 17:48:59

标签: ios objective-c timezone nsdateformatter uidatepicker

  

可能重复:
  Getting date from [NSDate date] off by a few hours
  NSDate date don’t give me the right hour

我有这段代码:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];

NSString *formattedDateInString = [formatter stringFromDate:[self.datePicker date]];
NSLog(@"This is the formatted date (STRING) ---> %@" ,formattedDateInString);
self.fromHourLabel.text = formattedDateInString;

NSDate *date = [formatter dateFromString:formattedDateInString];
NSLog(@"This is the date (NSDate) ---> %@" ,date);
self.fromHour = date;

我基本上从UIDatePicker获取日期,将Hours和Minutes设置为标签文本,并将日期保存到名为fromHour的属性中。在-viewDidLoad方法中,我也有:

self.datePicker.timeZone = [NSTimeZone localTimeZone];

这是输出:

enter image description here

正如您所看到的,使用此代码,我有两个主要问题:

  • 第一个输出是17.30,第二个是16:30(第一个输出是正确的,第二个是错的)为什么?
  • 第二个输出格式为“yyyy-MM-dd HH:mm:ss”,但我只需要“HH:mm”。

你能帮助我吗?

1 个答案:

答案 0 :(得分:4)

我知道有很多现有的问题可以解决这个问题,但我找不到一个。

问题很简单。使用NSLog打印对象或包含%@格式说明符的字符串格式时,将在对象上调用description方法。

description NSDate方法始终使用祖鲁时区(+0000)显示完整日期。

如果您想要以特定格式打印日期,请使用NSDateFormatter转换为字符串并打印字符串。

编辑:根据评论中的信息,这里的部分问题是您从正确的NSDate开始。然后,将其转换为格式为HH:mm的字符串。然后,您从该字符串创建一个新的NSDate。更好的解决方案是简单地保存原始日期并避免创建第二个日期。