NSDate 现在距离我的 ios 模拟器 1 小时

Posted

技术标签:

【中文标题】NSDate 现在距离我的 ios 模拟器 1 小时【英文标题】:NSDate now is 1 hr off my ios emulator 【发布时间】: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:”没有已知的类方法 【参考方案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 中仍然显示为晚一个小时。所以恐怕我不得不取消标记你的答案。

以上是关于NSDate 现在距离我的 ios 模拟器 1 小时的主要内容,如果未能解决你的问题,请参考以下文章

NSdate(时区)中的问题日期时间显示过去 5 小时 30 分钟

使用 NSDate 的 FMDB 查询执行但不生效

ios 时间解析 差8个小时

iOS将NSDate的UTC日期转换为本地时间以获取本地通知

iOS NSDate 和 NSDateFormatter 行为

如何在 [NSDate 日期] 当天 00:00 获取 NSDate?