【问题标题】:NSDate now is 1 hr off my ios emulatorNSDate 现在距离我的 ios 模拟器 1 小时
【发布时间】:2013-10-02 23:49:38
【问题描述】:

您好,我正在创建一个用于设置 Picker 的 NSDate,但是当我将选择器日期输出到 NSLog 时,它总是比实际选择器中显示的时间晚一个小时。

作为一个测试,我注意到代码: NSDate *now = [NSDate 日期]; //应该给我模拟器上的当前日期和时间 NSLog(@"现在的日期和时间:%@", now);

NSLog 值总是比我的模拟器上显示的时间晚 1 小时。

我的问题是为什么?

提前致谢:)

更新 ---------------------------------------------- ----------------------------------

我又做了几个测试,结果发现使用 NSGregorian Calendar 的 NSDate 返回了正确的时间,然后使用 currentCalendar 的 NSDate 关闭了 1 小时。

所以我的新问题是为什么会这样?我检查了模拟器上的设置,并且设备的日历设置为公历。这可能是由于时区差异造成的吗?如果是这样,我有没有办法将选择器设置为与用户设备使用相同的时区?

谢谢

【问题讨论】:

  • 尝试使用以下 + (id)dateWithNaturalLanguageString:(NSString *)string locale:(id)localeDictionary 打印日期并使用 [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] 作为 localeDictionary。
  • 嗨 Ben,感谢您的评论,但我收到一条错误消息 - 选择器“dateWithNaturalLanguageString:”没有已知的类方法

标签: iphone nsdate picker nscalendar nstimezone


【解决方案1】:

我认为这是因为您的模拟器时间设置为默认时区 (EN)。 NSDate 始终从您的本地时间设置。当您在设备上尝试时,它会是正确的。

我的项目中有这段代码并且工作正常:

NSDate*now = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd.MM.yyyy"];

我创建日期并将其存储到我的 CoreData。我在设备上的实际时间总是那个时间。

无论如何,恭喜你的新 iPhone。欢迎来到苹果大家庭! :)

【讨论】:

  • 嗨 Mayo323,感谢您的评论,您是对的,NSDate 确实返回了正确的时间。我又做了几个测试,结果发现使用 NSGregorian Calendar 的 NSDate 返回了正确的时间,然后使用 currentCalendar 的 NSDate 关闭了 1 小时。所以我的新问题是为什么会这样?我检查了模拟器上的设置,并且设备的日历设置为公历。如何使我的选择器与我的模拟器/设备具有相同的时区?
  • 模拟器总是-1小时。设备上的时间将是您设备本地时区的时间。
  • 别笑,但我还没有 iphone 来测试我的应用程序。不过我很快就会得到一个。感谢您的帮助,我会将您的答案标记为正确(我确定它是正确的):)
  • 嗨 Mayo323,我终于得到了装有 iOS 7.0.2 的 iPhone,并且从我设备上的选择器中返回的日期和时间在我的 NSLog 中仍然显示为晚一个小时。所以恐怕我不得不取消标记你的答案。
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多