【问题标题】:UIDatePicker giving wrong time [duplicate]UIDatePicker给出错误的时间[重复]
【发布时间】:2013-01-11 02:17:58
【问题描述】:

可能重复:
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];

这是输出:

如您所见,使用这段代码,我有两个主要问题:

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

你能帮帮我吗?

【问题讨论】:

  • 您是想将整个日期保存在 fromHour 中,还是只保存时间?你说你正在保存一个日期,但你这样做的方式只会给你时间(而且时间不正确)。
  • 这一定是 Cooca 被问到的第二多问题。提问前请先搜索。

标签: ios objective-c timezone nsdateformatter uidatepicker


【解决方案1】:

我知道现有的问题有几十个,但我找不到一个。

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

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

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

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

【讨论】:

  • 在这种情况下,我需要将属性 self.fromHour 设置为使用以下样式格式化的 NSDate:“HH:mm”。 NSLog 仅用于显示输出。如何使用正确的 17.30 NSDate 设置 self.fromHour 属性?
  • 现在您的财产是NSDateNSDate 对象本身未格式化。每次希望显示日期时都使用NSDateFormatter(这很好),或者将属性更改为包含预格式化值的NSString
  • 那么有没有办法在不遇到这个问题的情况下将一个小时“保存”为 NSDate(而不是 NSString)?我需要我的属性是 NSDate 而不是 NSString 并且正确保存时间(在这种情况下,是 17.30 而不是 16.30)。
  • 这里没有问题。 NSDate 对象具有所需的值。您只需要在需要时正确格式化它,就像您在发布的代码的第一部分中所做的那样。虽然不像您在代码的第二部分中那样从字符串创建新日期,但只需从选择器中保存原始日期即可。
  • @rdelmar 他从 NSDate 变成了一个只有 HH:mm 的字符串,然后又从这个字符串变成了一个新的 NSDate。这就是为什么我在评论中提到他应该只保留原始日期而不是新日期。
猜你喜欢
  • 2019-03-11
  • 2014-01-11
  • 2013-12-22
  • 2021-10-27
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多