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

| 我有一个应用程序,可以在预定的时间播放警报声。 将此设置为循环警报,它将在每天的同一时间响起。 例如:每天早上6点起床。 在DST过渡后,我首先注意到了一个问题。我会有一个警报,例如我在12月创建的警报,该警报每天早晨6点钟发出。行军后,警报开始于1小时前响起(或者可能是较晚,不记得了)。但是当我尝试调试问题时,它永远不会发生,而当我坐下来真正深入研究它时,我无法重现该问题。 最近,当我上床睡觉时,我一直将手机置于飞行模式。这似乎更频繁地重现该问题。但是有时候 一切正常。但是,如果我在进入飞行模式后检查了闹钟时间,它们似乎比我创建的时间晚了一个小时。 NSDate将显示 在我的闹钟表中是早上7点而不是早上6点。但有时它显示为上午6点。因此,我打开了闹钟。但是第二天早上,闹钟在上午7点响起。 我认为这与DST有关,而手机不知道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以及在飞机模式下系统时钟如何在幕后工作的怪异之处。 谢谢, 凯文     
已邀请:
        您可能使用的格式在存储日期时不考虑时区。 为什么不直接使用NSLog记录timerRec NSDate而不使用NSDateFormatter? 此外,直接登录NSDate会在控制台中显示有关NSDate的时区+ DST信息,而您使用的NSDateFromatterMediumStyle则不要(使用此datestyle显然不是调试TZ和TG这样的问题的最佳方式。 DST!)     

要回复问题请先登录注册