检查日期变更 - 调整时区

时间:2015-09-25 07:36:36

标签: swift timezone nsdate nsnotificationcenter

我刚刚尝试创建一些代码(粘贴在下面)来检查一天的变化。但是,现在I'm reading表示日期更改有特殊功能。

NSCalendarDayChangedNotification

显然它适用于iOS8及更高版本。但人们继续使用“你可以听它”的短语......好像使用该功能就像调到一个广播电台。我查了一下,最后一个WWDC提供了一些相关代码的演示文稿:

  

对日期变化做出反应•您可能希望在运行时运行一些代码   日更改NSCalendarDayChangedNotification•示例

noteCenter = [NSNotificationCenter defaultCenter];
observer = [noteCenter addObserverForName:NSCalendarDayChangedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
// your code here
}];

我的问题

我发现的PDF并没有说太多其他内容。所以我的问题是这个功能是如何工作的? PDF让它看起来真的只是这么简单,粘贴代码并且我已经完成了。真的吗?它会调整时区吗?我是否必须启用它所引用的通知中心?

我的代码(不确定它是否可行):

    //Find out if it's a new day
    let lastDateUsed_NSDefault = NSUserDefaults.standardUserDefaults()
    if let endOf_LastDateUsed = lastDateUsed_NSDefault.objectForKey("lastDateUsed") as! NSDate! {
        print("Success! NSUserDefault key: 'lastDateUsed' returned \(endOf_LastDateUsed)")
        //Check if the day has changed

        let calendar = NSCalendar.currentCalendar()
        let startOfToday = calendar.startOfDayForDate(now)

        if endOf_LastDateUsed.compare(startOfToday) == NSComparisonResult.OrderedAscending {
            //endOf_LastDateUsed is greater than startOfToday.
            print("Do nothing! Last date used must have been today!")
        } else if endOf_LastDateUsed.compare(startOfToday) == NSComparisonResult.OrderedAscending {
            //Day has changed. Run alert.


            //Save "endOfToday" date value to NSDefault
            let endOfToday = startOfToday.dateByAddingTimeInterval(24 * 60 * 60)
            NSUserDefaults.standardUserDefaults().setObject(endOfToday, forKey:"lastDateUsed")
            print("Time stored in NSDefault: \(endOfToday)")
        }

    }
    else {
        print("Failure! NSUserDefault key: 'lasteDateUsed' returned nothing. No record.")
        //First time user - Set end of today
        let calendar = NSCalendar.currentCalendar()
        let startOfToday = calendar.startOfDayForDate(now)
        print("startOfToday: \(startOfToday)")
        let endOfToday = startOfToday.dateByAddingTimeInterval(24 * 60 * 60)
        //Store
        NSUserDefaults.standardUserDefaults().setObject(endOfToday, forKey:"lastDateUsed")

        print("Time stored in NSDefault: \(endOfToday)")
    }

1 个答案:

答案 0 :(得分:2)

documentation(确实比我希望的那样难以定位)相当清楚:

  

每当系统日历日发生变化时发布,由系统日历,区域设置和时区决定。

所以是的,它应该适当地处理夏令时变化,因为它知道时区。我不知道启用通知中心,但这应该很容易通过调整设备上的系统时钟或时区来测试,看看会发生什么。

(文档中 约会。值得你尝试一下。)