Je cherche un moyen fiable d'obtenir le temps. Il ne peut pas être altéré et il doit travailler hors ligne. Donc, pas de temps Internet, pas de configuration de temps d'utilisateur dans les paramètres et pas de temps de disponibilité BSD depuis le dernier redémarrage. Je me demandais depuis que GPS fonctionne avec une horloge atomique, que je puisse accéder à cette information. P>
merci p>
5 Réponses :
Ceci vous obtient la date et l'heure actuelles: Ce sera aussi fiable que vous pouvez obtenir. L'horloge interne de l'iPhone sera mise à jour lorsqu'elle peut avoir accès à un serveur NTP. Si le téléphone utilise GPS comme source de synchronisation de temps, il sera également utilisé pour mettre à jour la même horloge à la lumière du système accessible via la méthode ci-dessus. P> L'équivalent de la fondation de base est quelque chose comme: p> CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
Le temps retourné par [nsdate date] code> peut être modifié par l'utilisateur.
Même si vous pouvez obtenir la maintenance du temps de GPS, il faut savoir que temps GPS < / a> n'est pas tout à fait identique que UTC. Le récepteur GPS dans l'iPhone pourrait s'occuper de cela pour vous. P>
Les chips GPS actuels offrent également le temps en UCC. Donc, il y a deux interprétations du temps GPS: heure UTC de GPS et du temps de GPS réel (actuellement UTC -14 secondes)
Nsdate et sa contrepartie des FC sont tous basés sur l'heure contrôlable par l'utilisateur et ne sont donc pas une preuve de désinvente.
Autant que je sache, il n'y a pas d'API ouvert pour le temps GPS ou le temps de transport. Cependant, vous pouvez vérifier le MACH_ABSOLUTE_TIMTIME pour obtenir une heure négligeée depuis le dernier démarrage et l'utiliser peut-être au moins être conscient du temps passé depuis la réveil que l'application a été réveillée (sans avoir le potentiel de ce temps pour être altéré. L'application est en cours d'exécution). P>
Mach_absolute_Time dépend du processeur de l'appareil. Il renvoie des ticks car l'appareil a été redémarré (autrement connu sous le nom de disponibilité). Afin de l'obtenir sous une forme lisible humaine, vous devez le modifier par le résultat de Mach_TimeBase_Info (un ratio), qui retournera le milliardième de secondes (ou nanosecondes). Pour que cela soit plus utilisable, j'utilise une fonction comme celle ci-dessous: p>
Cela fonctionne pour obtenir le temps GPS:
#import <CoreLocation/CoreLocation.h>
CLLocation* gps = [[CLLocation alloc]
initWithLatitude:(CLLocationDegrees) 0.0
longitude:(CLLocationDegrees) 0.0];
NSDate* now = gps.timestamp;
Je l'ai vérifié et j'ai trouvé que gps.timetamp code> retourne exactement la même heure que [date nsdate] code>.
En effet, les propriétés de l'horodatage renvoie l'horodatage lorsque cet emplacement a été déterminé. Code>
La norme d'or du chronométrage est les différents observatoires de temps du gouvernement des États-Unis et dans le monde. Ils fournissent du temps atomique. Qui est utilisé dans le monde entier. Apple devrait utiliser cela. Si vous souhaitez synchroniser les tours de cellule, il devrait y avoir une autre heure interne. Si les dysfonctionnements du système de la tour ou du GPS sont tous laissés à une heure incorrecte. P>
Vous savez que l'iPhone ferme le GPS en "mode avion", n'est-ce pas? En outre, il y a beaucoup d'endroits où vous n'obtiendrez pas de signal GPS, alors même si vous pouviez accéder à la composante temporelle (ce que j'attendrais, n'est pas disponible via une API), vous ne pouvez pas garantir sa disponibilité.
C'est bon. Si GPS ne reçoit pas de signal qui va bien. Je peux faire respecter que je n'ai besoin que d'échantillonner un temps négligé dans des endroits où j'ai déjà testé la disponibilité du GPS.
Je trouverais même qu'il est acceptable d'obtenir du temps de transporteur, mais cela ne semble pas être disponible dans l'API non plus.
Vous dites: "Si le téléphone utilise GPS comme source de synchronisation de temps". Est-ce que cela se synchronise sur le temps GPS? Comment savez-vous?