iOS监听日期变化, 跨天/手动修改系统时间

Posted 想名真难

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS监听日期变化, 跨天/手动修改系统时间相关的知识,希望对你有一定的参考价值。

app有签到的功能,  当日期发生变化时, 应该触发签到的接口, 但是用户在前台app时, 时间从11:59 到12:00时, 并没有触发签到,  可以采用下面的方式监听跨天变化.

  • UIApplicationSignificantTimeChangeNotification
  • - (void)applicationSignificantTimeChange:(UIApplication *)application

这2个是同样的时机, 调用applicationSignificantTimeChange是会同时触发UIApplicationSignificantTimeChangeNotification

当时间发生重大变化时调用,但是信息内容很少,通知内容不携带userInfo 字典。

具体场景为,

  1. 更改为新的一天
    1. 比如从5.1变成5.2, 
    2. 如果app在前台, 会立即收到通知
    3. 如果app在后台不会收到, 但是第二天比如9点打开app, 重新进入前台会立即触发此通知)
  2. 运营商时间更新,
  3. 更改为夏令时。

A notification that posts when there is a significant change in time, for example, change to a new day (midnight), carrier time update, and change to or from daylight savings time.

当时间发生重大变化时发布的通知,例如,更改为新的一天(午夜)、运营商时间更新,以及更改为夏令时。

This notification does not contain a userInfo dictionary.

此通知不包含userInfo字典。

If your app is currently suspended, this message is queued until your app returns to the foreground, at which point it is delivered. If multiple time changes occur, only the most recent one is delivered.

如果你的应用程序当前处于挂起状态,则此消息将一直排队,直到你的应用程序返回前台,并在前台发送。如果发生多个时间更改,则只发送最近的一个。

  • NSCurrentLocaleDidChangeNotification

如果应用程序显示受区域设置影响的内容(日期、时间、数字等),请注册此通知。使用通知触发应用程序界面的更新。

在项目中并没有使用这个, 而是使用了上面的方法.

Register for this notification if your app displays content (dates, times, numbers, and so on) that is affected by the locale. Use the notification to trigger updates to your app's interface. 


- (void)applicationSignificantTimeChange:(UIApplication *)application 
    NSLog(@"applicationSignificantTimeChange");

- (void)viewDidLoad 
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceTimeDidChanged:) name:UIApplicationSignificantTimeChangeNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(locakDidChanged:) name:NSCurrentLocaleDidChangeNotification object:nil];


- (void)deviceTimeDidChanged:(NSNotification *)noti 
    NSLog(@"本地时间改变, %@",noti);


- (void)locakDidChanged:(NSNotification *)noti 
    NSLog(@"本地化区域变化, %@",noti);

以上是关于iOS监听日期变化, 跨天/手动修改系统时间的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式打开文件时,日期格式/值会发生变化

iOS KVO监听数组元素的变化

Node.js 监听 MongoDB 变化

[IOS] 监听音量变化监听音量按键及隐藏系统音量UI

C语言应用(2)——判断当前时间是不是在一个时间段内(含跨天)

如何使用NodeJs来监听文件变化