Iphone NSDate在飞机模式或DST转换后向后或向前滑动一小时

Iphone NSDate在飞机模式或DST转换后向后或向前滑动一小时,iphone,nsdate,mode,airplane,Iphone,Nsdate,Mode,Airplane,我有一个应用程序在预定时间播放警报声。 这被设置为一个重复警报,每天都会在同一时间发出。 例如:每天早上6点起床 在DST转换之后,我第一次注意到一个问题。例如,我在12月份制作了一个闹钟,每天早上6点响。三月份之后,闹钟提前一小时响了(或者可能晚了,我不记得了)。但是当我试图调试这个问题时,它永远不会发生,当我坐下来真正深入研究它时,我无法重现这个问题 最近,当我上床睡觉时,我一直把手机放在飞行模式。这似乎更频繁地再现了这个问题。但有时 一切正常。但如果我在进入飞行模式后检查警报时间,它们将比

我有一个应用程序在预定时间播放警报声。 这被设置为一个重复警报,每天都会在同一时间发出。 例如:每天早上6点起床

在DST转换之后,我第一次注意到一个问题。例如,我在12月份制作了一个闹钟,每天早上6点响。三月份之后,闹钟提前一小时响了(或者可能晚了,我不记得了)。但是当我试图调试这个问题时,它永远不会发生,当我坐下来真正深入研究它时,我无法重现这个问题

最近,当我上床睡觉时,我一直把手机放在飞行模式。这似乎更频繁地再现了这个问题。但有时 一切正常。但如果我在进入飞行模式后检查警报时间,它们将比我创建的时间晚一个小时。日期将显示 早上7点起床,而不是早上6点起床。但有时它会在早上6点出现。所以我打开了闹钟。但是第二天早上7点闹钟响了

我认为这与DST有关,而手机不知道它是否在DST中 NSDate对象。然而,我手机上显示的实际时间从来没有错过。但是我的闹钟在错误的时间响了

以下是我的代码示例: 笔记: timerRec是我数据库中的结构化记录 alarmTime是从数据库中提取的NSDate对象 NSLog值用于调试,以查看是否可以将其打印错误 但当我连接到调试器时,它从未失败过

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *tempAlarm = [dateFormatter stringFromDate:timerRec.alarmTime];
NSLog(@"scheduleAlarm for firedate: %@", tempAlarm);

[CCUtility scheduleAlarmForDate: timerRec.alarmTime alarmSound:
    [CCUtility convertSoundCodeToFileName: [timerRec.soundCode intValue]]
alarmMessage: message repeatInterval: repeatInterval];
在此方面的任何帮助都将不胜感激。我可以发布额外的代码,但主要的问题似乎是我如何使用NSDate以及系统时钟在飞行模式下如何在后台工作

谢谢


Kevin

在存储日期时,您可能会使用不考虑时区的格式

为什么不直接记录您的timerRec NSDate而不是使用NSDateFormatter? 此外,直接记录NSDate将在控制台中显示有关NSDate的时区+DST信息,而您使用的NSDateFromatterMediumStyle则不会(使用此datestyle显然不是调试此类问题的最佳样式,包括TZ和DST!)