2009-11-09 2 views
90

Comment modifier l'heure et le fuseau horaire dans le simulateur iPhone?Comment changer l'heure et le fuseau horaire dans le simulateur d'iPhone?

+0

pour changer L'heure et la date du système ne sont pas une solution. Cela a un impact sur toutes les applications Mac, y compris les horodatages xcode. Le comportement correct est que toute modification de l'emplacement du Simulateur doit changer l'heure et le fuseau horaire. Toutes les autres choses ne sont que des solutions de contournement. J'espère que Apple va résoudre ce problème dès que possible – Rudi

Répondre

141

Je devine qu'il utilise votre fuseau horaire du système, changeant ainsi le TZ dans les Préférences Système serait probablement faire l'affaire

Screenshot for description

+0

Hmm ... Je n'ai pas cette option sur mon simulateur. Sur mon téléphone, sous Paramètres -> Général -> Date et heure. Sur mon simulateur, la section Date et heure n'existe pas. –

+5

Oh ...changez-le dans les préférences système de votre machine, pas dans les paramètres du simulateur. Droite. Ça a marché! –

+2

un problème dans ce temps, Simulator est mis à jour après 2 minutes de changer l'heure du système. toute méthode qui change le temps du simulateur simultanément .... – AsifHabib

21

Redémarrez le simulateur après avoir modifié les préférences temporelles date du système et vous verrez la changements reflétés. Cela a fonctionné pour moi.

+93

Solution horrible (sur la partie d'Apple, pas votre réponse). C'est exactement le genre de chose que le simulateur devrait être en mesure de faire en tant qu'alternative sûre pour changer le temps de votre système et potentiellement casser des choses sur votre ordinateur. – devios1

+3

@devios c'est plus vrai que jamais avec  Watch – Lewis42

+0

@ Lewis42, que voulez-vous dire? –

1

Lors de la modification du fuseau horaire, j'ai trouvé que la manière la plus simple de le faire était de cliquer sur l'horloge dans la barre de menus. Et puis en sélectionnant "Ouvrir la date & Préférences de temps" puis sélectionnez l'onglet Fuseau horaire. Autre possibilité Préférences système -> Date et heure et sélectionnez l'onglet Fuseau horaire. Juste un pointeur pour n'importe qui qui pourrait ne pas connaître leur chemin autour d'OSX.

+3

Ceci n'est pas une réponse, donc ce devrait être un commentaire. Le nombre de développeurs iOS qui ne connaissent pas OS X est ... zéro. – phatmann

18

Il serait utile que Apple fournisse une "date de simulation" puisqu'ils ont fourni un menu "Simuler l'emplacement". Ce que je fais est de définir un point d'arrêt immédiatement après avoir obtenu la date (l'enregistrer dans une variable), puis modifier la valeur. Ou simplement modifier l'endroit où je vérifie un changement de date et le rendre vrai.

1

Ceci est un ancien thread mais il est le plus proche de ma question. J'ai besoin de simuler un fuseau horaire pour l'Europe, cette méthode fonctionne pour moi. Cliquez sur 'TimeZone' au lieu de 'Date & Time'. Décochez la case "Définir automatiquement le fuseau horaire en utilisant l'emplacement actuel" et faites glisser la barre rectangle verticale (avec un point bleu dessus) pour simuler l'heure de votre système.

enter image description here

2

J'ai proposé une solution automatique au problème de la modification du temps qui comprend la méthode hacky swizzling: https://stackoverflow.com/a/34793193/829338. Je suppose que cela devrait également fonctionner pour changer le fuseau horaire en conséquence. Je devais tester mon application automatiquement, ce qui nécessitait de changer le temps sys. Je l'ai fait, ce que Tom a suggéré: méthode de hacky heureux swizzling. Pour les besoins de la démonstration, je ne change que [NSDate date] mais pas [NSDate dateWithTimeIntervalSince1970:].

Vous devez d'abord créer votre méthode de classe qui sert de nouvelle [date NSDate]. Je l'ai mis en œuvre pour simplement déplacer l'heure par une différence de temps constante.

int timeDifference = 60*60*24; //shift by one day 
NSDate* (* original)(Class,SEL) = nil; 

+(NSDate*)date{ 
    NSDate* date = original([NSDate class], @selector(date)); 
    return [date dateByAddingTimeInterval:timeDifference]; 
} 

Jusqu'ici, assez facile. Maintenant vient la partie amusante. Nous obtenons les méthodes des classes et de l'implémentation de l'échange (cela a fonctionné pour moi dans AppDelegate, mais pas dans ma classe UITests). Pour cela, vous devrez importer objc/runtime.h.

Method originalMethod = class_getClassMethod([NSDate class], @selector(date)); 
Method newMethod = class_getClassMethod([self class], @selector(date)); 

//save the implementation of NSDate to use it later 
original = (NSDate* (*)(Class,SEL)) [NSDate methodForSelector:@selector(date)]; 

//happy swapping 
method_exchangeImplementations(originalMethod, newMethod); 
+0

IlRC ne fonctionnera pas pour tester les notifications locales. –

Questions connexes