web-dev-qa-db-fra.com

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

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

122
Rahul Vyas

Je suppose qu'il utilise le fuseau horaire de votre système, donc changer le TZ dans les Préférences Système ferait probablement l'affaire

Screenshot for description

185
nduplessis

Redémarrez le simulateur après avoir modifié les préférences de date et heure système et vous verrez les modifications reflétées. Cela a fonctionné pour moi.

32
Vishal Shah

Il serait utile si Apple fournissait une "date simulée" comme ils fournissaient un menu "Simuler une position". Ce que je fais est de définir un point d'arrêt immédiatement après l'obtention de la date (en l'enregistrant dans une variable). puis modifiez la valeur ou modifiez simplement le point où je vérifie le changement de date et le retourne à true.

31

Lors du changement de fuseau horaire, j'ai trouvé que le moyen le plus simple de le faire était de cliquer sur l'horloge dans la barre de menu. Et puis en sélectionnant "Ouvrir les préférences de date et heure" puis sélectionnez l'onglet Fuseau horaire.

Vous pouvez également choisir Préférences Système -> Date et heure et sélectionner l'onglet Fuseau horaire.

Juste un pointeur pour ceux qui ne connaissent pas OSX.

5
Lasse

C'est un vieux fil, mais il est plus proche de ma question. J'ai besoin de simuler le fuseau horaire pour l'Europe, cette méthode fonctionne pour moi. Allez à "TimeZone" appuyez sur au lieu de "Date & Time" appuyez sur. Décochez la case "Définir le fuseau horaire automatiquement à l'aide de la position actuelle" et faites glisser la barre rectangulaire verticale (avec un point bleu) pour simuler l'heure de votre système.

enter image description here

4
Ohmy

J'ai proposé une solution automatique au problème de modification de l'heure qui inclut 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 l'heure du système. Je l'ai fait, ce que Tom a suggéré: une méthode de hacky joyeuse.

À des fins démonstratives, je ne change que [NSDate date] mais non [NSDate dateWithTimeIntervalSince1970:].

Tout d'abord, vous devez créer votre méthode de classe qui servira de nouvelle [date du NSDate]. Je l'ai implémenté pour simplement décaler le temps d'une différence constante time.

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 deux classes et de l'implémentation Exchange (cela fonctionnait 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);
2
Sebastian Hojas

Mon serveur de build est UTC et certains de mes tests unitaires avaient besoin que le fuseau horaire soit PST. En utilisant une catégorie sur NSTimeZone, vous pouvez remplacer l'implémentation d'Apple pour utiliser votre code. Fonctionne pour Swift seulement les projets aussi.

//NSTimeZone+DefaultTimeZone.h
#import <Foundation/Foundation.h>

@interface NSTimeZone (DefaultTimeZone)

+(NSTimeZone *)defaultTimeZone;

@end

//NSTimeZone+DefaultTimeZone.m
#import "NSTimeZone+DefaultTimeZone.h"

@implementation NSTimeZone (DefaultTimeZone)

+(NSTimeZone *)defaultTimeZone
{
    return [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];
}

@end
1
odyth