【问题标题】:PhoneGap iOS LocalNotifications Daylight SavingsPhoneGap iOS LocalNotifications 夏令时
【发布时间】:2013-04-08 14:14:33
【问题描述】:

我正在使用(臭名昭著的)Drew Dahlman's Phonegap Local Notifications in iOS。而且它似乎起作用了。

我从来没有写过一行objective-c,也不想写(这可能是我现在遇到麻烦的原因!)但我认为插件工作不正常,会如果可能的话,喜欢修复它。

当我在今天 13:00 设置通知时,它会正确触发。但是,当夏令时生效时,通知会在 14:00 触发,晚了一个小时。

这是因为没有考虑时区吗? Drew 提到将时区设置为 +0000 不是问题,但这是错误信息吗?我应该更新插件以处理时区和夏令时吗?或者在我自己的代码中处理夏令时,并在 DST 处于活动状态时简单地设置日期 -1 小时?

我认为我必须更新 LocalNotification.m 中的第二行,但正如我所说,我不确定将其更新为什么。

UILocalNotification *notif = [[UILocalNotification alloc] init];
notif.timeZone = [NSTimeZone defaultTimeZone];

【问题讨论】:

    标签: ios objective-c cordova phonegap-plugins uilocalnotification


    【解决方案1】:

    啊,设置通知时似乎有点奇怪的问题。

    示例 1: 当我做这样的事情时,duedate 的值是 2013-04-08T21:30

    var d = new Date(duedate).getTime();
    d = new Date(d);
    
    plugins.localNotification.add({
    date: d,
    ...
    

    通知被记录为设置为 21:30,如下所示:

    Notification Set: 2013-04-08 21:30:00 +0000

    示例2:如果我这样设置duedate:(现在时间是21:30)

    var d = new Date().getTime();
    

    通知被记录为设置为 20:30,如下所示:

    Notification Set: 2013-04-08 20:30:00 +0000

    但是在第二个示例中,由于夏令时,通知会在 21:30 触发。

    解决方案(各种)

    我将不得不添加或减去从现在到我希望触发通知的时间差,而不是专门设置日期。

    【讨论】:

      【解决方案2】:

      这很有趣。在创建插件时,我处理的最重要的事情之一是 JS 和 OBJ-C 解释时间的奇怪方式。根据文档,您可以使用systemTimeZone,但这又是由插件所依赖的系统设置的。那是用户设置的时间和手机正在使用的时间。

      即使它默认为 +000GMT,它仍然会在系统时间中考虑这一点,并针对 +0500 或您所在的任何区域进行调整。

      UILocalNotification not using the correct timezone

      NSTimeZone: what is the difference between localTimeZone and systemTimeZone?

      两者都处理这个 - 默认情况下插件使用系统时间。

      【讨论】:

        猜你喜欢
        • 2012-10-15
        • 2013-02-18
        • 2011-02-22
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        相关资源
        最近更新 更多