イベントに日付スタンプを記録するCocoaアプリケーションがあります。私はシステム時間がいつリセットされ、どのくらいであるかを知る必要がありますが、私はそのようなことが起こったと私に知らせるどこの通知もうまくいかないようです。この変更は、NTPが時計をリセットするか、ユーザーがリセットしたために発生する可能性があります(システム環境設定などから)。受け取るために登録することができるNSNotificationがあればそれは素晴らしいことですが、私はいかなる提案にも開放しています。Cocoaアプリケーションのシステム時間の変更を通知するにはどうすればよいですか?
答えて
Appleがで追加しました。NSSystemClockDidChangeNotification、Snow Leopard(10.6)のNSDateの一部です。 Leopard(10.5)以前ではこれを行う方法がないようです。 Apple NSDate docs:
システムクロックが変更されたときはいつでも投稿されます。これは、settimeofday()の呼び出し、またはユーザーがDate and Time Preferenceパネルで値を変更することによって開始できます。通知オブジェクトはnullです。この通知にuserInfoディクショナリは含まれていません。
これは、「どのくらいの時間」が変更されたかを示すものではありません。 NSSateClientDidChangeNotificationが発生した後、それを変数に保存し、NSDateを使用して新しい日付を取得し、2つを一緒に比較することができます(たとえば、NSTimerで5秒ごとに)[NSDate date] timeIntervalSinceDate:違いを得る方法。
精度はミリ秒ではなく、秒ではありませんが、かなり近いです。
編集:this postを参照してください。 UpTime()
Cコマンドを使用して、CPUチックでシステム稼働時間を取得できます(後で秒単位に変換できます)。これを使用して、システムの再起動やスリープがないと仮定して、どれくらいの時間が経過したかを把握できます。これは、システムクロックがユーザーまたはネットワークタイムプロトコルによって変更された場合でも機能します。
時間が絶えず動いています。現在の時刻が変更されるたびに通知がCPUの浸透している通知のストリームになります。
あなたがしなければならないことは、イベントハンドラで現在の時刻を取得することです。イベントハンドラは、日付を記入しているイベントを受け取る時刻です。現在時刻は[NSDate date]
になります。
さて、OPはクロックの通常の進歩ではなく、時間の珍しい変化を意味することは明らかですね:) – phlebotinum
私は、時間を変えることができるさまざまな仕組みのために、それを行う方法はないと思います。しかし、それほど高価ではありません(あまりにも高価ですか?まだ分かりませんか?)、NSTimer
を1秒に1回設定して時間をチェックし、前の値と比較してください。約1秒進んでいない場合、面白いことが起こり、監査オブジェクトに通知することができます。
には、解決策を探しているいくつかは、例えば、時にクロックの変更あなたが意味ですか10.4
OSStatus DateChangeEventHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void *userData)
{
NSLog(@"Event received!\n");
return 0;
}
- (void)SystemTimeChangeHandler
{
EventTypeSpec eventType;
eventType.eventClass = kEventClassSystem;
eventType.eventKind = kEventSystemTimeDateChanged;
EventHandlerUPP eventHandlerUPP =
NewEventHandlerUPP(DateChangeEventHandler);
EventHandlerRef eventHandlerRef = NULL;
(void)InstallApplicationEventHandler(
eventHandlerUPP,
1,
&eventType,
self,
&eventHandlerRef);
}
- 1. 他のCocoaアプリケーションに、環境設定が変更されたことを通知するにはどうすればよいですか?
- 2. ウェブページの特定の変更をすばやく通知するにはどうすればよいですか?
- 3. 音量の変更に関する通知を登録するにはどうすればよいですか?
- 4. iOSアプリケーションの通知センターでプッシュ通知のアイコンを変更するにはどうすればよいですか?
- 5. デスクトップ設定の変更についてWindowsに通知するにはどうすればよいですか?
- 6. Spring Frameworkを使用してクライアントに変更を通知するにはどうすればよいですか?
- 7. Cocoaを使用して現在の時間を取得するにはどうすればよいですか?
- 8. 設定 - >通知の下に通知を設定するにはどうすればよいですか?
- 9. 登録期限通知テキストを変更するにはどうすればよいですか?
- 10. SMSシステム通知を偽装するにはどうすればよいですか?
- 11. システム時間が変更されたかどうかを検出するにはどうすればよいですか?
- 12. アプリケーションがアンドロイドで閉じられている場合でも、特定の時間後に通知をプッシュするにはどうすればいいですか?
- 13. Androidで他のアプリケーションの通知にアクセスするにはどうすればよいですか?
- 14. ZedGraphのXaxisで時間枠を変更するにはどうすればよいですか?
- 15. Windows Mobileでタイムゾーンの夏時間を変更するにはどうすればよいですか?
- 16. Android AnimationDrawableアニメーションの再生時間をオンザフライで変更するにはどうすればよいですか?
- 17. C#でシステムのアイドル時間を測定するにはどうすればよいですか?
- 18. テスト目的のために現地時間を変更するにはどうすればよいですか?
- 19. システム時刻を設定するにはどうすればよいですか?
- 20. アプリケーションのグローバル変数の変更についてアクティビティに通知するにはどうすればよいですか?
- 21. どのような変更がユーザーに通知されるのですか?
- 22. Growl通知:ウェブサイトからGrowl通知をプッシュするにはどうすればよいですか?
- 23. アクティビティの変更時にデフォルトのアニメーションを変更するにはどうすればよいですか?
- 24. iOSプッシュ通知をテストするにはどうすればよいですか?
- 25. 24時間から12時間に変換するにはどうすればよいですか?
- 26. webClient.UploadData()の制限時間を変更するにはどうすればよいですか?
- 27. 通知を管理してアプリケーションのMainActivityをキャンセルするにはどうすればよいですか?
- 28. SQLServerはvb.netアプリケーションにイベントを通知するにはどうすればよいですか?
- 29. Androidアプリケーションへのプッシュ/ C2DM通知をテストするにはどうすればよいですか?
- 30. ウィンドウのサイズ変更時にng-classを変更するにはどうすればよいですか?
からシステムの日付変更変更イベントを知っている場合NTP同期によって、またはタイムゾーンを変更したり、システム環境設定で時間を手動で設定したりしますか? –
はい、そうです。私はあまりにも明白ではなかったことは申し訳なく思っています。私はうまくいけば、今これをより明確にした。 –